Java进程列表

时间:2011-06-08 18:00:43

标签: linux bash unix command-line

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

18 个答案:

答案 0 :(得分:119)

尝试:

ps aux | grep java

看看你如何上场

答案 1 :(得分:96)

最近的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 :(得分:42)

jps -lV

最有用。打印只是pid和合格的主类名称:

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

答案 3 :(得分:25)

您也可以使用单个命令pgrep(不要求您使用管道和多个命令):

pgrep -fl java

答案 4 :(得分:24)

从Java 7开始,最简单的方法,更不容易出错,只需使用JDK 中的jcmd 命令就可以了在所有操作系统上以相同的方式工作。

示例:

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

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

有关how to use jcmd的更多详情。

另见the jcmd Utility

答案 5 :(得分:11)

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

ps -e|grep java

答案 6 :(得分:8)

要获得更好的输出格式,请检查以下命令:

ps -fC java

答案 7 :(得分:8)

public class Match { public int MatchId { get; set; } [Required] public virtual Round Round { get; set; } // other stuff to keep track of match results public virtual Team Team1 { get; set; } public virtual Team Team2 { get; set; } [Required] public TeamSourceType SourceType1 { get; set; } [Required] public TeamSourceType SourceType2 { get; set; } public virtual Match SourceMatch1 { get; set; } public virtual Match SourceMatch2 { get; set; } }

ps aux | grep java

答案 8 :(得分:6)

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

ps -A | grep java

答案 9 :(得分:3)

pgrep -l java
ps -ef | grep java

答案 10 :(得分:2)

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

等...

答案 11 :(得分:2)

当我想知道某个Java类是否正在执行时,我使用以下命令行:

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

从操作系统侧视图,进程的命令名是" java"。 " ww"选项会扩大colum的最大字符数,因此可以grep相关类的FQN。

答案 12 :(得分:2)

jps&当我在redhat linux上使用openjdk-1.8尝试使用时,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

列出所有进程的窗口的替代方法是:

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

但这需要一些解析才能让它更清晰。

答案 13 :(得分:1)

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

我知道,这似乎很糟糕,而且不便携,甚至执行不力,我同意。但是因为Java实际上是在VM中运行的,出于一些荒谬的原因,我在JDK工作超过15年之后无法弄清楚,为什么不可能看到JVM空间以外的东西,这对你来说真的很荒谬想一想。您可以执行其他所有操作,即使是forkjoin子进程(当世界不知道线程 pthreads <时,这些是多任务处理的可怕方式/ strong>,真是太糟糕了!Java正在发生什么?!:)。

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

JavaDoc:http://jezhumble.github.io/javasysmon/,搜索班级com.jezhumble.javasysmon.OsProcess,她会做的伎俩。希望它有所帮助,祝你好运。

答案 14 :(得分:1)

 ps -eaf | grep [j]ava

它更好,因为它只会向你显示不包含此命令的活动进程,而{j}还有java字符串}

答案 15 :(得分:0)

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

答案 16 :(得分:0)

以下命令将仅返回Java ProcessID。每当您希望通过此返回值(java PID)来馈送另一个进程时,这些命令将非常有用。

sudo netstat -nlpt | awk'/ java / {print $ 7}'| tr'/ java'''

sudo netstat -nlpt | awk'/ java / {print $ 7}'| sed's // java / / g'

但是,如果删除最新的管道,您会注意到这些是Java进程

sudo netstat -nlpt | awk'/ java / {print $ 7}'

sudo netstat -nlpt | awk'/ java / {print $ 7}'

答案 17 :(得分:-1)

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