如何在 bash 中列出所有 Java 进程? 我需要一条命令行。我知道有命令 ps,但我不知道我需要使用什么参数。
ps
尝试:
ps aux | 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
等等。
您也可以使用单个命令 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.lang.ProcessBuilder
pgrep -fl java | awk {'print $1'}
/proc
我知道,这看起来很糟糕,而且不可移植,甚至实现得很差,我同意。但是因为 Java 实际上是在 VM 中运行的,在使用 JDK 超过15年之后,出于某种荒谬的原因,我无法真正弄明白,这就是为什么不可能看到 JVM 空间之外的东西,你想想就会觉得很荒谬。你可以做其他任何事情,甚至 fork和 join子进程(这是一种可怕的多任务处理方式,当世界不知道 丝线或 螺纹,什么是地狱!Java 怎么了? !:).
fork
join
我知道这会引起很大的讨论,但无论如何,我已经在我的项目中使用了一个非常好的 API,它足够稳定(它是 OSS,所以在真正相信 API 之前,您仍然需要对所使用的每个版本进行压力测试) : https://github.com/jezhumble/javasysmon
JavaDoc: http://jezhumble.github.io/javasysmon/,搜索类 com.jezhumble.javasysmon.OsProcess,她会做的。希望它有帮助,祝你好运。
com.jezhumble.javasysmon.OsProcess
我使用这个(对 Debian 8很好) : Alias psj = ‘ ps —— no-headers-ww-C java-o pid,user,start _ time,command’
Alias psj = ‘ ps —— no-headers-ww-C java-o pid,user,start _ time,command’
从 Java7 开始,最简单的方法是简单地使用命令 jcmd 是 JDK 的一部分,这样它在所有操作系统上的工作方式都是一样的。
jcmd
例如:
> 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 -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}’