web-dev-qa-db-ja.com

Javaプロセスのリスト

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

95
Jacek Koralik

試してください:

ps aux | grep Java

そして、あなたがどのように乗るかを見てください

121
Rich

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

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

例えば、

[[email protected] support]$ jps -m
2120 Main --userdir /home/nsushkin/.netbeans/7.0 --branding nb
26546 charles.jar
17600 Jps -m
98
jps -lV

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

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

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

pgrep -fl Java
25
anubhava

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

例:

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

jcmdは、実行中のJava Virtual Machine(JVM)に診断コマンド要求を送信できます。

jcmdの使用方法 に関する詳細。

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

24
Nicolas Filotto

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

ps -e|grep Java
11
Jude Niroshan

出力形式を改善するには、次のコマンドを確認してください。

ps -fC Java
8
Marcel Bernic

ps aux | grep Java

または

$ ps -fea|grep -i Java

単にJavaプロセスをリストする場合は、次を使用します。

ps -A | grep Java
6
krzysiek.ste
pgrep -l Java
ps -ef | grep Java
4
vaquar khan
ps axuwww | grep Java | grep -v grep

上記の意志

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

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

上記を別のコマンドにパイプすることができます、例えば:

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

等...

2
jm666

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

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

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

2
airbjorn

redhat Linuxでopenjdk-1.8を使用して試してみたところ、jps&jcmdで結果が表示されませんでした。しかし、たとえそれが行われたとしても、現在のユーザーの下でプロセスを表示するだけで、私の場合は機能しません。 ps | grepを使用することは私がやったことですが、一部のJavaアプリのクラスパスは非常に長くなる可能性があり、結果が判読不能になるため、sedを使用して削除しました。これはまだ少し荒いですが、PID、User、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

しかし、より読みやすくするために解析が必要になります。

2
Mike

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

私は知っています、これは恐ろしくて、移植性がなく、実装さえ不十分だと私は同意します。しかし、Javaは実際にVMで実行されるため、JDKを15年以上使用した後では本当に理解できないという不合理な理由により、JVMスペースの外の物を見ることができないのです。 、それについて考えるのは本当にばかげています。 forkおよびjoin子プロセス(世界がthreadsまたはpthreads、なんてこった!Javaで何が起こっているのか!:)。

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

JavaDoc: http://jezhumble.github.io/javasysmon/ 、クラスcom.jezhumble.javasysmon.OsProcessを検索し、彼女はトリックを行います。幸運を祈ります。

1
jbrios777
 ps -eaf | grep [j]ava

これは、Java文字列を取得したこのコマンドを含まないアクティブなプロセスのみを表示するので優れています。[]はトリックを実行します

1
Ilya Gazman

私はこれを使用します(Debian 8で良好です):alias psj='ps --no-headers -ww -C Java -o pid,user,start_time,command'

0