有沒有辦法判斷 shell 腳本是否被訊號 9 殺死

有沒有辦法判斷 shell 腳本是否被訊號 9 殺死

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

相關內容