如何在bash中列出所有Java进程?
我需要一个命令行。我知道有ps
命令,但我不知道我需要使用哪些参数。
答案 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
的更多详情。
答案 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
以上将
(顺便说一句,这个例子不是有效的,但很容易记住);)
您可以将上述内容传递给其他命令,例如:
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空间以外的东西,这对你来说真的很荒谬想一想。您可以执行其他所有操作,即使是fork
和join
子进程(当世界不知道线程或 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字符串1>}
答案 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