Bash

有什麼方法可以判斷 shell 腳本是否被信號 9 殺死

  • May 23, 2016

我有一個不斷被殺死的 bash 腳本(從 java 程序呼叫)。我總是捕捉到signal 15trap但隨後出現了一些我懷疑是的其他信號,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 處換行。

引用自:https://unix.stackexchange.com/questions/283481