私は殺され続けているbashスクリプト(Javaプログラムから呼び出されます)を持っています。常にsignal 15
をtrap
でキャッチしますが、他の信号がそれに伴います私はsignal 9
だと思いますが、それが本当にsignal 9
であるかどうかについては基本的に盲目です。
trap
signal 9
を実行できないことはわかっています。signal 9
がシェルスクリプトを強制終了していることを確認する方法は他にありますか?
Killされたコマンドの終了ステータスは、シグナル番号に128を加えたものにする必要があります。したがって、終了ステータスを使用して、プロセスがkillしたシグナルを見つけることができます。
シェルの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
編集:プログラムは任意の値で終了することを決定できることに注意してください(そのため、終了ステータスがシグナルの影響であると信頼できる範囲を決定する必要があります)。
for i in $(seq 256); do
sh -c "exit $i"
echo Program exited with $?
done
脚注1:私のシステムでは、終了コードは符号なしの8ビット数として表されるため、256 = 0でラップします。