UnixにはJavaアプリケーションがあります。アプリケーションが予期せず停止しました。問題を探しています。
Unixで起動されたJavaプロセスが終了するかどうかはどうすればわかりますか? (でkill -9 pid
)コードを変更することも、キャプチャすることもできません。 javaを使用して起動を変更できます-verbose
。何かがこのプロセスを殺しています...
$JAVA_HOME/bin/java \
-verbose \
-classpath '../../lib/*:.:./config' com.xxx.xxx.core.xxxxApp instance:$INSTANCE
しかし、ログには表示されません。別の方法がありますか?
ベストアンサー1
あなたの質問に対するコメントで、ウォルティナーが提案したように、シェルスクリプトを使用してプロセスを実行できます。スクリプトは、プロセスが終了するのを待つのをブロックし、エラーモードの終了ステータスを確認します。
通常、プロセスがシグナルによって終了した場合、プレゼンス状態は 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