UnixでJavaプロセスが死んでいるかどうかを確認する方法は?

UnixでJavaプロセスが死んでいるかどうかを確認する方法は?

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

おすすめ記事