Java 进程列表

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

388198 次浏览

尝试:

ps aux | grep java

看看你怎么样

ps axuwww | grep java | grep -v grep

以上将

  • 显示所有具有长行的进程(参见: www)
  • Filter (grep)只包含单词 java 的行,并且
  • 过滤掉“ grep java”:)

(顺便说一下,这个例子不是很有效,但是很容易记住)

您可以将上述命令传送到其他命令,例如:

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

等等。

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

pgrep -fl 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

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

ps -A | grep java

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

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

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

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

ps -e|grep java

了解在 linux 机器上运行的 java 列表。 Ps-e | grep java

jps -lV

只打印 pid 和限定的主类名称:

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

有很多方法可以做到这一点。您可以使用 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,她会做的。希望它有帮助,祝你好运。

我使用这个(对 Debian 8很好) : Alias psj = ‘ ps —— no-headers-ww-C java-o pid,user,start _ time,command’

从 Java7 开始,最简单的方法是简单地使用命令 jcmd 是 JDK 的一部分,这样它在所有操作系统上的工作方式都是一样的。

例如:

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

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

更多有关 如何使用 jcmd的资料。

参见 jcmd实用程序

Jps & jcmd 在 redhat linux 上使用 openjdk-1.8进行尝试时没有显示任何结果。但即使它这样做,它也只显示当前用户下的进程,这在我的情况下不起作用。使用 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

但这需要进行一些解析,使其更加清晰。

 ps -eaf | grep [j]ava

这样更好,因为它只显示不包括这个命令的活动进程,这个命令也得到了 java 字符串,[]可以做到这一点

pgrep -l java
ps -ef | grep java

ps aux | grep java

或者

$ ps -fea|grep -i java

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

ps -fC java

以下命令只返回 JavaProcessID。这些命令非常有用,特别是当您希望通过这些返回值(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}’