シグナル9によってシェルスクリプトが終了したかどうかを知る方法はありますか?

シグナル9によってシェルスクリプトが終了したかどうかを知る方法はありますか?

継続的に終了するbashスクリプト(Javaプログラムから呼び出されます)があります。私はいつもそれをキャプチャしますsignal 15が、trapそれが本当であると疑われる別の信号が表示されます。signal 9しかし、基本的にそれが本当かどうかはわかりませんsignal 9

私はあなたができないことを知っています。もしそうなら、私のシェルスクリプトが終了したかどうかをtrap signal 9知るための別の方法はありますか?signal 9

ベストアンサー1

終了したコマンドの終了状態は、信号番号に128を加えた値でなければなりません。したがって、終了ステータスを使用して、どの信号がプロセスを終了したかを確認できます。

Linuxシェルでこれをテストしました。

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

編集:プログラムは任意の1値で終了することを決定できます(したがって、終了状態が信号の効果であると信じる程度を決定する必要があります)。

for i in $(seq 256); do
  sh -c "exit $i"
  echo Program exited with $?
done

脚注1:私のシステムでは、終了コードは符号なし8ビット数で表示されるため、256 = 0に改行されます。

おすすめ記事