2011-11-14 74 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号。