Status keluar dari perintah yang terbunuh haruslah nomor sinyal ditambah 128. Jadi Anda dapat menggunakan status keluar untuk mengetahui sinyal mana yang membunuh Anda proses.
Saya mengujinya seperti ini di Linux di shell:
print_exit_status_for_signal () {
(
sleep 1000
echo Exit staus $? = signal $(( $? - 128 ))
) &
sleep 1
killall "${1:+-$1}" sleep
}
print_exit_status_for_signal
print_exit_status_for_signal 15
print_exit_status_for_signal 9
print_exit_status_for_signal KILL
print_exit_status_for_signal TERM
EDIT: Perhatikan bahwa suatu program dapat memutuskan untuk keluar dengan nilai ¹ (jadi Anda harus memutuskan seberapa jauh Anda mempercayai status keluar sebagai efek dari sinyal):
for i in $(seq 256); do
sh -c "exit $i"
echo Program exited with $?
done
Catatan Kaki 1: Pada sistem saya kode keluar diwakili sebagai angka 8-bit yang tidak ditandatangani sehingga mereka membungkus pada 256 = 0.
status
proses anak melaluiwait(2)
atau sesuatu.