
我有一個 bash 腳本(從 java 程式呼叫)不斷被殺死。我總是捕捉到signal 15
,trap
但隨後出現一些其他訊號,我懷疑是,signal 9
但我基本上不知道它是否真的signal 9
。
我知道你不能trap
signal 9
,那麼有其他方法可以判斷是否signal 9
正在殺死我的 shell 腳本嗎?
答案1
被殺死的命令的退出狀態應該是信號號加128。
我在 Linux 的 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
編輯:請注意,程式可以決定以任何 1 值退出(因此您必須決定您在多大程度上相信退出狀態是訊號的影響):
for i in $(seq 256); do
sh -c "exit $i"
echo Program exited with $?
done
註腳 1:在我的系統上,退出代碼表示為無符號 8 位數字,因此它們在 256=0 處換行。