Process

如何檢查unix中的java程序是否被殺死?

  • June 9, 2021

我在 Unix 上有一個 java 應用程序。此應用程序意外停止。我正在尋找問題所在。

我如何判斷在 Unix 上啟動的 java 程序是否被殺死?(with kill -9 pid) 我無法修改程式碼,我無法捕捉。我可以用-verbose. 有些東西正在扼殺這個過程……

$JAVA_HOME/bin/java \
-verbose \
-classpath '../../lib/*:.:./config' com.xxx.xxx.core.xxxxApp instance:$INSTANCE

但它不會出現在日誌中。還有什麼方法嗎?

正如 waltinator 在對您的問題的評論中建議的那樣,您可以使用 shell 腳本執行您的程序。該腳本可以阻止等待您的程序終止,然後檢查退出狀態以了解故障模式。

一般來說,如果一個程序被一個信號終止,存在狀態是128加上信號號。例如,如果有人kill -9對程序執行了 a,則退出狀態將為 137 (128 + 9 = 137)。

例如,這是一個腳本,它執行您的命令並在響應信號終止時列印一條消息:

#!/bin/bash

$JAVA_HOME/bin/java \
   -verbose \
   -classpath '../../lib/*:.:./config' com.xxx.xxx.core.xxxxApp instance:$INSTANCE

rc=$? # The $? variable has the exit status of the previous command


if [[ ${rc} -gt 128 ]]; then
   printf "Process terminated with signal %d\n" $((rc - 128))
fi

現在,如果我kill -9用來終止java程序,那麼我得到:

Process terminated with signal 9

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