javaが現在実行しているjarファイル(およびそのPID)を確認するにはどうすればよいですか?


12

.jar誤動作で悪名高いファイルがあります。誤動作が発生した場合、再起動のみが役立ちます。私はその誤動作を検出する方法を持っています(上記のログファイルを読み取る.jar)したがって、誤動作が発生するたびにプロセスを強制終了するスクリプトを書きたいと思います。問題は:

confus@confusion:~$ ps -A
...
4438 ?        00:00:00 java
4439 ?        00:00:00 java
4443 ?        00:00:00 java
...

実行中.jarのすべてのs のプロセス名は当然「java」です。これらの「java」プロセスのうち、私が殺したいもの、つまり実行中のものがどれであるかを知るにはどうすればよいfoobar.jarですか?


同じユーザーとして実行する場合は、たとえばvisualvmを使用して接続し、強制終了する前に検査できることに注意してください。
トールビョーンラヴンアンデルセン

回答:


11

lsof引数として指定されたjarファイルを使用して、開いているファイルがあるプロセスをリストするコマンドを実行できます。少ないファイルを表示する例:

egil@mutter:~$ lsof foo.c
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
less    18871 egil    4r   REG    8,2        0 53862540 foo.c
egil@mutter:~$

スクリプトでpidを簡単に再利用するには、簡潔モードで実行できます。

egil@mutter:~$ lsof -t foo.c
18871

この答えはさらに優れています。+1。
オクタヴィアンA.ダミアン

7

使用ps axすると役立ちます。

プロセスツリーをBSDスタイルで表示し、より多くの情報を表示します。

特定のプロセスを見つけるには、JAR名をgrepするだけです。ps ax | grep JARNAMEそれを行います。


1

これはネイティブで実行できます。または、「lsof」が/ proc // fdを介してインストールされていない場合は、例:

ps -ef|grep -w java
...
0c4       6917  6916  0 12:22 pts/7    00:00:00 java
...

ls -la /proc/6917/fd/
total 0
dr-x------ 2 0c4 svauser  0 Apr  2 12:23 .
dr-xr-xr-x 9 0c4 svauser  0 Apr  2 12:22 ..
lrwx------ 1 0c4 svauser 64 Apr  2 12:23 0 -> /dev/pts/7
lrwx------ 1 0c4 svauser 64 Apr  2 12:23 1 -> /dev/pts/7
lrwx------ 1 0c4 svauser 64 Apr  2 12:23 2 -> /dev/pts/7
lr-x------ 1 0c4 svauser 64 Apr  2 12:23 3 -> /opt/jdk1.8.0_191/jre/lib/rt.jar
lr-x------ 1 0c4 svauser 64 Apr  2 12:23 4 -> /media/veracrypt1/Downloads/rr/testone.jar
lr-x------ 1 0c4 svauser 64 Apr  2 12:23 5 -> /usr/share/java/gnu-getopt-1.0.14.jar

0

あなたは使うことができjps-l完全なパスで使用する.jarファイルを返しますオプション。

-lアプリケーションのメインクラスのフルパッケージ名、またはアプリケーションのJARファイルへのフルパス名を表示します。


質問が行われたときに使用可能なJavaランタイムにjpsが存在しませんでした。現在入手可能なもので利用可能です。
トールビョーンラヴンアンデルセン

私は、Java SE 6のドキュメントでそれを見ることができます:docs.oracle.com/javase/6/docs/technotes/tools/share/jps.html、と私はここで見ることができるように、それは2006年12月からです。en.wikipedia.org/ wiki / Java_version_history#Java_SE_7
froblesmartin
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.