BashのすべてのJavaプロセスをリストするにはどうすればよいですか?コマンドラインが必要です。コマンドps
があることは知っていますが、使用する必要のあるパラメーターはわかりません。
試してください:
ps aux | grep Java
そして、あなたがどのように乗るかを見てください
最近の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
jps -lV
最も便利です。 pidと修飾されたメインクラス名のみを出力します。
2472 com.intellij.idea.Main
11111 Sun.tools.jps.Jps
9030 play.server.Server
2752 org.jetbrains.idea.maven.server.RemoteMavenServer
単一のコマンド pgrep も使用できます(パイプと複数のコマンドを使用する必要はありません)。
pgrep -fl Java
Java 7から開始し、最も簡単でエラーが発生しにくい方法は、JDKの一部であるコマンドjcmd
を使用することですすべてのOSで同じように動作するように。
例:
> jcmd
5485 Sun.tools.jcmd.JCmd
2125 MyProgram
jcmd
は、実行中のJava Virtual Machine(JVM)に診断コマンド要求を送信できます。
jcmd
の使用方法 に関する詳細。
jcmd
ユーティリティ も参照してください
これにより、Linux環境で実行中のすべてのJavaプロセスが返されます。その後、プロセスIDを使用してプロセスを強制終了できます。
ps -e|grep Java
出力形式を改善するには、次のコマンドを確認してください。
ps -fC Java
ps aux | grep Java
または
$ ps -fea|grep -i Java
単にJavaプロセスをリストする場合は、次を使用します。
ps -A | grep Java
pgrep -l Java
ps -ef | grep Java
ps axuwww | grep Java | grep -v grep
上記の意志
(ところで、この例は効果的な例ではありませんが、覚えやすいです);)
上記を別のコマンドにパイプすることができます、例えば:
ps axuwww | grep Java | grep -v grep | sed '.....' | while read something
do
something_another $something
done
等...
特定のJavaクラスが実行されているかどうかを知りたいときは、次のコマンドラインを使用します。
ps ww -f -C Java | grep "fully.qualified.name.of.class"
OS側から見ると、プロセスのコマンド名は「Java」です。 「ww」オプションは、列の最大文字数を広げるので、関連クラスのFQNをgrepすることができます。
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
しかし、より読みやすくするために解析が必要になります。
これを行うには多くの方法があります。 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
を検索し、彼女はトリックを行います。幸運を祈ります。
ps -eaf | grep [j]ava
これは、Java文字列を取得したこのコマンドを含まないアクティブなプロセスのみを表示するので優れています。[]
はトリックを実行します
私はこれを使用します(Debian 8で良好です):alias psj='ps --no-headers -ww -C Java -o pid,user,start_time,command'