Java进程列表

我如何列出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 (不需要使用pipe道和多个命令):

 pgrep -fl java 

从Java 7开始 ,最简单的方法就是简单地使用JDK中包含的命令jcmd 以便在所有操作系统上以相同的方式工作。

例:

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

jcmd允许向正在运行的Java虚拟机(JVM)发送诊断命令请求。

更多关于如何使用jcmd

另请参阅jcmd实用程序

这将在linux环境中返回所有正在运行的java进程。 然后,您可以使用进程ID来终止进程。

 ps -e|grep java 

如果我只想列出java进程,请使用:

 ps -A | grep java 
 ps axuwww | grep java | grep -v grep 

以上将会

  • 向您展示所有长行的进程(arg:www)
  • filter(grep)只包含单词java和
  • 过滤掉“grep java”这一行:)

(顺便说一句,这个例子不是有效的,但简单的记住);)

您可以将上述内容传递给另一个命令,例如:

 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”选项扩展了colum的最大字符,所以可以grep相关类的FQN。

要知道在linux机器上运行的java列表。 ps -e | grep java

有很多方法可以做到这一点。 您可以使用java.lang.ProcessBuilder和“pgrep”来获取进程ID(PID),如下所示: pgrep -fl java | awk {'print $1'} pgrep -fl java | awk {'print $1'} 。 或者,如果您在Linux下运行,则可以查询/proc目录。

我知道,这似乎是可怕的,不便携,甚至执行不力,我同意。 但是因为Java实际上运行在一个虚拟机上,出于一些荒谬的原因,我在JDK工作了15年之后,实在搞不清楚为什么看不到JVM空间之外的东西,所以对你来说真的很荒谬考虑一下。 你可以做其他事情,甚至是forkjoinsubprocess(当世界不知道线程线程时 ,这是多任务的一种可怕方式,到底是什么东西!Java是怎么回事?:)。

这将给我所知道的一个巨大的讨论,但无论如何,有一个非常好的API,我已经在我的项目中使用,它已经足够稳定( 这是OSS,所以你仍然需要在真正相信API之前对每个版本进行压力testing ): https ://github.com/jezhumble/javasysmon

JavaDoc: http : com.jezhumble.javasysmon.OsProcess ,search类com.jezhumble.javasysmon.OsProcess ,她会做的伎俩。 希望它有帮助,祝你好运。

当我在redhat linux上使用openjdk-1.8的时候,jps&jcmd没有显示任何结果。 但即使它只显示当前用户下的进程,在我的情况下不起作用。 使用ps | grep是我最终做的,但是某些java应用程序的类path可能非常长,导致结果难以辨认,因此我使用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 

但是这将需要一些parsing,使其更清晰。

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

 pgrep -l java ps -ef | grep java 

ps aux | grep java

要么

$ ps -fea|grep -i java

  ps -eaf | grep [j]ava 

这是更好的,因为它只会显示不包含这个命令的活动进程也得到了Javastring[]是否有窍门