Bash
有什麼方法可以判斷 shell 腳本是否被信號 9 殺死
我有一個不斷被殺死的 bash 腳本(從 java 程序呼叫)。我總是捕捉到
signal 15
,trap
但隨後出現了一些我懷疑是的其他信號,signal 9
但我基本上對它是否真的是盲目的signal 9
。我知道你不能
trap
signal 9
,所以有沒有其他方法可以判斷是否signal 9
正在殺死我的 shell 腳本?
一個被殺死的命令的退出狀態應該是信號號加128。所以你可以使用退出狀態來找出你處理的哪個信號被殺死了。
我在 shell 中的 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 處換行。