Java进程列表


113

如何在bash中列出所有Java进程?我需要一个命令行。我知道有命令,ps但是我不知道需要使用哪些参数。


1
请在研究和描述您的问题上花费更多的精力,根据您的需求,有很多可能性。
马太福音

3
如果您知道那里有,ps那么请首先尝试man ps,然后info ps在Internet上了解它。
ssapkota 2011年

Answers:


148

尝试:

ps aux | grep java

看看你过得如何


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仅随JDK一起提供,而不与JRE一起提供。在其上具有纯Java运行时的计算机将没有此工具。
aguazales

我如何才能获得正在运行的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







5
pgrep -l java
ps -ef | grep java

5
感谢您提供此代码段,它可能会立即提供帮助。通过说明为什么这是一个解决问题的好方法,适当的解释将大大提高其教育价值,并且对将来有相似但不相同问题的读者更有用。请编辑您的答案以添加说明,并指出适用的限制和假设。特别是为什么第二个步骤不显示过程呢?grep
Toby Speight

4
ps axuwww | grep java | grep -v grep

以上将

  • 向您显示长行的所有过程(arg: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"

从操作系统的角度来看,该进程的命令名称为“ java”。“ ww”选项扩大了列的最大字符,因此可以grep相关类的FQN。


这就是我一直在寻找的- $ top仅给出“ java”作为命令,当试图找出哪个进程在占用CPU时并没有太大帮助。$ ps ww -fC java提供拼图的缺失部分。
David Clarke

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空间之外看到事物的原因,这对您来说真的很可笑考虑一下。你可以做一切,甚至forkjoin子进程(这些是多任务处理时,世界上没有不知道的可怕的方式线程并行线程,什么是地狱!这是怎么回事在与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不是[​​j] ava
vaquar khan

@vaquarkhan dude只是尝试运行您的建议和我的建议,看看有什么区别,它们都将起作用
Ilya Gazman

两者都给出了相同的结果,但是[j] ava令人困惑
vaquar khan

0

我用这个(在Debian 8上很好): alias psj='ps --no-headers -ww -C java -o pid,user,start_time,command'


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.