2010-08-06 20 views
0

我需要在bash上找到某個java進程的pid。高級pgrep-like進程在bash中搜索

如果只有一個java進程,

PID=$(pgrep java) 

作品。

對於多個java進程,它變得更加複雜。手動運行,我運行pstree,找到我需要的java進程的祖先,然後找到有問題的java進程。是否有可能在bash中做到這一點?基本上,我需要的是僞代碼如下功能:

Having `processname1` and `processname2` 
and knowing that `processname2` is in the subtree of 'processname1', 
find the pid of `processname2`. 

在這個例子中的java程序將是processname2

回答

2

更新您的僞代碼問題:找到所有processname2進程,其中有一個processname1進程作爲父進程。

pgrep -P $(pgrep -d, processname1) processname2 

這裏的文檔,這些標誌直接從pgrep(1)手冊頁:這使用下面的嵌套pgrep呼叫可以直接表達

-d delimiter 
     Sets the string used to delimit each process ID in the output 
     (by default a newline). 

    -P ppid,... 
     Only match processes whose parent process ID is listed. 

請注意,這隻會如果processname2工作是processname1的直接子進程。

+0

我在手冊頁中對-P的描述感到困惑。如果'processname2'不是'processname1'的直接子對象,而是孫子等等(所以它們之間的鏈中還有其他中間進程),這會起作用嗎?控制檯中的一個快速實驗顯示,只有當'processname2'是一個直接的孩子時,你的配方纔有效。 – 2010-08-06 00:31:18

+0

不,這隻適用於直接的子/父進程。爲此添加了一條評論。 – earl 2010-08-06 01:00:13