2011-11-14 117 views
82

我想用ps -ef | grep "keyword"來確定守護進程的pid(在ps -ef的輸出中有一個唯一的字符串)。從ps -ef | grep關鍵字獲取pid

我可以用pkill keyword殺死進程有沒有任何命令返回pid而不是殺死它? (或者的pidof p纖ep不工作)

回答

175

可以使用pgrep只要你包括-f選項。這使得pgrep與整個命令(包括參數)中的關鍵字相匹配,而不僅僅是進程名稱。

pgrep -f keyword 

man page

  -f    圖案通常只針對進程的名稱相匹配。當設置-f時,將使用完整的命令行。


如果你真的想避免p纖ep,嘗試:

ps -ef | awk '/[k]eyword/{print $2}' 

注意[]圍繞關鍵詞的第一個字母。這是避免匹配awk命令本身的有用技巧。

+1

感謝:)有點新到linux這個-f作品:P –

+1

不客氣,丹尼斯。 –

+3

ps被過度使用,並且pgrep如此使用不足。感謝這篇文章。 –

38

嘗試

ps -ef | grep "KEYWORD" | awk '{print $2}'

這個命令應該給你對其中的關鍵字進程的PID。在這種情況下,awk正在返回輸出中第二列的內容。

+1

因爲這可以返回多個pid,您可以通過追加'|來獲得第一個pid。頭-1「。 – Kris

5

這是在Linux上使用:的pidof關鍵字

8

ps -ef | grep KEYWORD | grep -v grep | awk '{print $2}'

+4

也許是一個錯字? ps -ef | grep KEYWORD | grep -v grep | awk'{print $ 2}' – rmv

+0

你知道如何將返回的PID傳遞給「kill -9」嗎?! – alybadawy

+0

@alybadawy只需添加'| xargs殺死-9'到最後 – patte8

6

我用

ps -C "keyword" -o pid= 

這個命令應該給你一個PID號。