2011-06-08 24 views
77

如何列出bash中的所有Java進程? 我需要一個命令行。我知道有命令ps,但我不知道我需要使用什麼參數。Java進程列表

+1

請顯示bi在研究這個問題和描述你的問題上付出更多的努力,取決於你究竟在做什麼,有很多可能性。 – Mat 2011-06-08 18:03:18

+3

如果你知道有'ps',那麼首先嚐試'man ps','info ps'並在Internet上了解它。 – ssapkota 2011-06-08 23:10:05

回答

96

嘗試:

ps aux | grep java 

,看看你的身體情況如何

+14

或使用「jps」... – 2011-06-08 18:06:11

3
ps axuwww | grep java | grep -v grep 

上面會

  • 顯示你對長行(ARG:WWW)的所有進程
  • 過濾器(grep)只包含那些包含單詞java的行,並且
  • 過濾出列的「grep的java」 :)

(順便說一句,本實施例中不是有效的,但簡單記住);)

可以以上到另一個命令管,用於例如:

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

等等

23

您可以使用單一命令pgrep以及(不要求您使用管道和多個命令):

pgrep -fl java 
84

最新的Java自帶的Java虛擬機進程狀態工具 「太平紳士」

http://download.oracle.com/javase/1.5.0/docs/tooldocs/share/jps.html

例如,

[[email protected] support]$ jps -m 
2120 Main --userdir /home/nsushkin/.netbeans/7.0 --branding nb 
26546 charles.jar 
17600 Jps -m 
+2

只需注意:jps只隨JDK發行,而不是JRE。使用普通ol運行時的機器將不具備此工具。 – aguazales 2015-06-17 17:43:50

+0

我怎樣才能得到正在運行的java進程? – Jet 2018-02-06 12:29:35

7

,如果我想簡單地列出Java進程,使用:

ps -A | grep java 
2

當我想知道如果得到執行一定的Java類,我使用以下命令行:

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

從OS側視圖,該進程的命令名稱爲「Java」的。 「ww」選項擴展了colum的最大字符,所以可以grep相關類的FQN。

10

這將返回所有在linux環境下運行的java進程。然後,您可以使用進程ID來終止進程。

ps -e|grep java 
1

瞭解linux機器上運行的java列表。 ps -e | grep java

33
jps -lV 

是最有用的。打印只是pid和合格的主要類名稱:

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

有很多方法來做到這一點。您可以使用java.lang.ProcessBuilder和「pgrep」來獲取進程ID(PID),如:pgrep -fl java | awk {'print $1'}。或者,如果您在Linux下運行,則可以查詢/proc目錄。

我知道,這看起來很可怕,而且不便攜,甚至執行不力,我同意。但是因爲Java實際上運行在虛擬機中,出於一些荒謬的原因,我在JDK工作15年以後無法真正理解,這就是爲什麼看不到JVM空間之外的東西,這對你來說真的很荒謬考慮一下。你可以做一切,甚至forkjoin子進程(這些是多任務的可怕的方式,當世界不知道線程並行線程,什麼是地獄!這是怎麼回事在與Java?:) 。

這會給一個巨大的討論中,我知道,但不管怎麼說,還有,我已經在我的項目中使用一個很好的API,它是足夠穩定(它是OSS所以你仍然需要進行壓力測試每一個你真的相信之前使用的版本該API):https://github.com/jezhumble/javasysmon

的JavaDoc:http://jezhumble.github.io/javasysmon/,搜索類com.jezhumble.javasysmon.OsProcess,她會做的伎倆。祝你好運,祝你好運。

0

我用這個(良好在Debian 8): alias psj='ps --no-headers -ww -C java -o pid,user,start_time,command'

15

從Java 7,最簡單的方法且不易出錯開始是簡單地使用命令jcmd那就是JDK這樣的部分它將在所有操作系統上以相同的方式工作。

實施例:

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

jcmd允許發送診斷命令請求到正在運行的Java 虛擬機(JVM)。

關於how to use jcmd的更多細節。

又見the jcmd Utility

+1

哇,這甚至比'jps'好 – 2016-08-23 00:08:08

1

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 

但是,這將會需要一些解析,以使其更清晰。

-1
ps -eaf | grep [j]ava 

這是更好,因爲它只會告訴你的活動進程不包括此命令也得到了Java字符串的[]的伎倆

+0

它應該是ps -eaf | grep Java不是[​​j] ava – 2017-07-31 19:24:32

+0

@vaquarkhan老兄只是試着運行你的和我的建議,看看有什麼區別,他們兩個都會工作 – 2017-07-31 19:49:13

+0

兩個都給出了相同的結果然而[j] ava令人困惑 – 2017-07-31 20:28:09

0
pgrep -l java 
ps -ef | grep java 
+5

謝謝你的代碼片段,這可能會提供一些即時幫助。通過展示*爲什麼*這是一個很好的解決方案,對未來的讀者會有更好的解決方案,這將爲它的教育價值提供一個合適的解釋[//大大提高](// meta.stackexchange.com/q/114762)但不完全相同的問題。請編輯您的答案以添加解釋,並指出適用的限制和假設。特別是,爲什麼其中的第二個顯示「grep」過程? – 2017-08-01 11:33:00

2

ps aux | grep java

$ ps -fea|grep -i java