プロセス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スクリプトにプラグインできるソリューションです。実行中です。スクリプトを続行する前に、ユーザーに閉じるように依頼する必要があります。)
デフォルトでは、pgrep
はコマンドにのみ一致し、引数には一致しません。完全なコマンドラインと一致させるには、-f
オプション。
$ pgrep -f Java_app
Pgrepのマンページから:
-fパターンは通常、プロセス名に対してのみ照合されます。 -fを設定すると、完全なコマンドラインが使用されます。
JDKの一部である jcmd ユーティリティを使用できます。現在実行中のJavaプロセスのみをリストしているため、必要なのはJava_app
のgrepだけです。
jcmd | grep Java_app | cut -d " " -f 1
pidof Java
を使用して、どのJavaプロセスが実行されているかを把握し、ps -p $PID -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS
などの各プロセスの詳細を取得して、ターゲットアプリケーションが実行されているかどうかとその使用状況を確認できますユーザーに閉じるか続行するかを尋ねる必要があるかどうか。