Javaプロセスのリスト


113

すべてのJavaプロセスをbashでリストするにはどうすればよいですか?コマンドラインが必要です。コマンドpsがあることは知っていますが、使用する必要があるパラメーターがわかりません。


1
これを調査してあなたの問題を説明するためにもう少し努力を示してください、あなたが正確に何を求めているかに応じて多くの可能性があります。
Mat

3
あなたが知っている場合があるps最初の試行しman psinfo psそしてインターネットでそれについて学びます。
ssapkota

回答:



109

最近のJavaにはJava仮想マシンプロセスステータスツール「jps」が付属しています

http://download.oracle.com/javase/1.5.0/docs/tooldocs/share/jps.html

例えば、

[nsushkin@fulton support]$ jps -m
2120 Main --userdir /home/nsushkin/.netbeans/7.0 --branding nb
26546 charles.jar
17600 Jps -m

2
注:jpsはJREではなく、JDKにのみ同梱されています。プレーンな古いJavaランタイムを搭載したマシンには、このツールはありません。
アグアザレス2015年

実行中のJavaプロセスの数を取得するにはどうすればよいですか?
ジェット

50
jps -lV

最も便利です。pidと修飾されたメインクラス名のみを出力します。

2472 com.intellij.idea.Main
11111 sun.tools.jps.Jps
9030 play.server.Server
2752 org.jetbrains.idea.maven.server.RemoteMavenServer

31

単一のコマンドpgrepも使用できます(パイプと複数のコマンドを使用する必要はありません)。

pgrep -fl java

27

Java 7以降、最も簡単でエラーが発生しにくい方法jcmd は、JDKの一部であるコマンド使用して、すべてのOSで同じように機能するようにすることです。

例:

> jcmd
5485 sun.tools.jcmd.JCmd
2125 MyProgram

jcmd 実行中のJava仮想マシン(JVM)に診断コマンド要求を送信できます。

使用方法のjcmd詳細。

参照してくださいユーティリティjcmd


1
すごい、それよりも良いjps
Sridhar Sarnobat


12

これにより、Linux環境で実行中のすべてのJavaプロセスが返されます。次に、プロセスIDを使用してプロセスを強制終了できます。

ps -e|grep java


6

Javaプロセスを単純に一覧表示する場合は、次を使用します。

ps -A | grep java

5
pgrep -l java
ps -ef | grep java

5
このコードスニペットをお寄せいただきありがとうございます。すぐに役立つ情報が得られる場合があります。適切な説明は、なぜこれが問題の優れた解決策であるを示すことにより、教育的価値を大幅に向上させ、同様の、しかし同一ではない質問を持つ将来の読者にとってより有用になるでしょう。回答を編集して説明を追加し、適用される制限と前提を示してください。特に、なぜそれらの2番目がプロセスを示さないのですか?grep
Toby Speight 2017

4
ps axuwww | grep java | grep -v grep

上記は

  • すべてのプロセスを長い行で表示します(引数:www)
  • フィルター(grep)は、javaという単語を含む行のみを行します。
  • 「grep java」という行を除外します。

(ところで、この例は効果的なものではありませんが、覚えるのは簡単です);)

上記を別のコマンドにパイプできます。次に例を示します。

ps axuwww | grep java | grep -v grep | sed '.....'  | while read something
do
    something_another $something
done

等...


3

特定のJavaクラスが実行されているかどうかを知りたいときは、次のコマンドラインを使用します。

ps ww -f -C java | grep "fully.qualified.name.of.class"

OS側から見ると、プロセスのコマンド名は「java」です。「ww」オプションは、列の最大文字数を広げるので、関連クラスのFQNをgrepすることが可能です。


これが私が探していたものです- $ top"java"をコマンドとして指定するだけで、どのプロセスがCPUを消費しているのかを理解しようとするときにあまり役に立ちません。$ ps ww -fC java不足しているパズルのピースを提供します。
デビッドクラーク

2

Redhat Linuxでopenjdk-1.8を使用して試したところ、jps&jcmdに結果が表示されませんでした。しかし、たとえそれが実行されたとしても、現在のユーザーのプロセスのみが表示され、私の場合は機能しません。最終的にps | grepを使用することになりますが、一部のJavaアプリのクラスパスは非常に長くなり、結果が読みにくくなるため、sedを使用して削除しました。これはまだ少しラフですが、PID、ユーザー、java-class / jar、argsを除くすべてを削除します。

ps -o pid,user,cmd -C java | sed -e 's/\([0-9]\+ *[^ ]*\) *[^ ]* *\([^$]*\)/\1 \2/' -e 's/-c[^ ]* [^ ]* \|-[^ ]* //g'

結果は次のようになります。

  PID USER     CMD
11251 userb org.apache.zookeeper.server.quorum.QuorumPeerMain ../config/zookeeper.properties
19574 userb com.intellij.idea.Main
28807 root org.apache.nifi.bootstrap.RunNiFi run
28829 root org.apache.nifi.NiFi

Windowsですべてのプロセスを一覧表示する代替方法は次のとおりです。

WMIC path win32_process where "Caption='java.exe'" get ProcessId,Commandline

しかし、それはそれをより読みやすくするためにいくつかの解析が必要になるでしょう。


1

これを行う方法はたくさんあります。java.lang.ProcessBuilder「pgrep」を使用して、次のようなプロセスID(PID)を取得できますpgrep -fl java | awk {'print $1'}。または、Linuxで実行している場合は、/procディレクトリ。

私は知っています、これは恐ろしく、移植性がなく、実装も不十分であると私は同意します。しかし、Javaは実際にはVMで実行されているため、JDKを15年以上使用しても実際に理解できないなんらかの不合理な理由のために、JVM空間の外にあるものを見ることができないのは、あなたにとってはとんでもないことです。それについて考えてください。あなたも、他のすべて、行うことができますforkし、join世界は知りませんでしたとき、子プロセス(これらは、マルチタスクの恐ろしい方法でしたが、スレッドpthreadsの地獄!何は、Javaで上に何が起こっているか、?! :)。

これは私が知っている非常に大きな議論になりますが、とにかく、私はすでにプロジェクトで使用した非常に優れたAPIがあり、十分に安定していますそれはOSSなので、実際にAPIを信頼する前に、使用するすべてのバージョンをストレステストする必要があります)。 https ://github.com/jezhumble/javasysmon

JavaDoc:http : //jezhumble.github.io/javasysmon/、クラスを検索com.jezhumble.javasysmon.OsProcess、彼女はトリックを行います。それがお役に立てば幸いです。


1
 ps -eaf | grep [j]ava

それはあなた[]がトリックを行うJava文字列も取得したこのコマンドを含まないアクティブなプロセスのみを表示するのでより良いです


ps -eafである必要があります。grep Java not [j] ava
vaquar khan 2017

@vaquarkhanは、あなたと私の両方の提案を実行して、違いを確認してみてください。どちらも機能します
イリヤガスマン

どちらも同じ結果が得られますが、[j] avaは混乱しています
vaquar khan 2017


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.