web-dev-qa-db-ja.com

bashスクリプトでJavaアプリケーションのプロセスIDを検索します(ターゲットアプリケーションが既に実行されているかどうかを確認するため)

プロセスIDの取得に関して100万の質問があることは知っていますが、これはユニークなようです。グーグルは私に答えを与えていないので、stackexhangeがこの質問を閉じるのではなく助けてくれることを願っています。

Javaが関係している場合、プロセスIDを見つけるのは難しいようです(pgrepは機能しません)。

さらに、これをbashスクリプトで自動化する必要があります。私が遭遇した1つの問題は、ps aux | grep grepプロセス自体は常に表示されるので、単純なbashスクリプトで結果を処理するだけでは、(自分の限られたbashスキルで)自分で適切な解決策を理解するには十分ではありません。

私が試したいくつかのこと:

例1-その名前のアプリケーションがない場合でも、これはプロセスを返します。

$ ps aux | grep -i anythingnotreal
user2   3040  0.0  0.0   4640   856 pts/3    S+   18:17   0:00 grep --color=auto -i anythingnotreal

例2-「Java_app」が現在実行されている場合でも、これは何も返しません。

$ pgrep Java_app

何も返しません。ただし、「Java_app」が実行されていることの証明は次のとおりです。

$ ps aux | grep Java_app
tester2   2880  0.7  2.8 733196 58444 ?        Sl   18:02   0:07 Java -jar /opt/Java_app2/my_Java_app.jar
tester2   3058  0.0  0.0   4644   844 pts/3    S+   18:19   0:00 grep --color=auto Java_app

必要なのは、Java対象のアプリケーション(jarファイルの名前とパスがわかっている)が現在実行されているかどうかを通知するbashスクリプトにプラグインできるソリューションです。実行中です。スクリプトを続行する前に、ユーザーに閉じるように依頼する必要があります。)

5
MountainX

デフォルトでは、pgrepはコマンドにのみ一致し、引数には一致しません。完全なコマンドラインと一致させるには、-fオプション。

$ pgrep -f Java_app

Pgrepのマンページから:

-fパターンは通常、プロセス名に対してのみ照合されます。 -fを設定すると、完全なコマンドラインが使用されます。

6
jordanm

JDKの一部である jcmd ユーティリティを使用できます。現在実行中のJavaプロセスのみをリストしているため、必要なのはJava_appのgrepだけです。

jcmd | grep Java_app | cut -d " " -f 1
0
Abhijit Sarkar

pidof Javaを使用して、どのJavaプロセスが実行されているかを把握し、ps -p $PID -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGSなどの各プロセスの詳細を取得して、ターゲットアプリケーションが実行されているかどうかとその使用状況を確認できますユーザーに閉じるか続行するかを尋ねる必要があるかどうか。

0
Raza