Apakah ada cara untuk mengetahui apakah skrip shell terbunuh dengan sinyal 9

14

Saya memiliki skrip bash (dipanggil dari program java) yang terus terbunuh. Saya selalu menangkap signal 15dengan traptetapi kemudian beberapa sinyal lain datang yang saya duga adalah signal 9tapi saya di dasarnya buta untuk jika itu benar-benar signal 9.

Saya tahu Anda tidak bisa trap signal 9, jadi apakah ada cara lain yang bisa saya katakan jika signal 9membunuh skrip shell saya?

jgr208
sumber
4
Apa yang menjalankan skrip shell? Proses itu harus memiliki akses ke statusproses anak melalui wait(2)atau sesuatu.
deras
program java yang berjalan sebagai daemon dimulai dengan pemula mulai menjalankan proses skrip shell
jgr208
1
Anda dapat memilih program dan mencari garis yang mengatakan "dibunuh oleh SIGKILL" atau melakukan pekerjaan audit dengan-a entry,always -F arch=b64 -S kill -k kill_signals
Bratchley

Jawaban:

20

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.

Lucas
sumber
1
Perhatikan bahwa ini hanya dapat diandalkan untuk sinyal 9 yang tidak dapat dijebak. Sinyal lain dapat terjebak oleh program yang kemudian dapat keluar dengan nilai berapa pun.
GnP
ya, seperti dikatakan gnp, kill -9 tidak bisa
dijebak
Apakah Anda punya sumber?
Dua puluh