継続的に終了する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に改行されます。