从ps -ef | grep关键字获取pid


111

我想用 ps -ef | grep "keyword"确定守护进程的pid(在ps -ef的输出中有一个唯一的字符串)。

我可以用pkill keyword没有杀死pid的命令来返回进程吗?(pidof或pgrep不起作用)

Answers:


231

可以使用pgrep,只要包括这些-f选项即可。这使得pgrep整个命令(包括参数)中都具有匹配关键字,而不仅仅是进程名称。

pgrep -f keyword

手册页

-f       该模式通常仅与进程名称匹配。时-f被设定,则使用完整的命令行。


如果您确实想避免pgrep,请尝试:

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

注意[]关键字的第一个字母。这是避免匹配awk命令本身的有用技巧。


3
ps被过度使用,而pgrep被过度使用。感谢您的帖子。
费利佩·阿尔瓦雷斯

6
通过输出杀死数据的一种方法是: kill -9 `pgrep -f keyword`
Kris

这个答案是有史以来最好的。所以,很多时候我已经浪费了ps aux | grep chrome
布兰登

不得不在上面使用[k]技巧pgrep -f。我的脚本在子外壳中运行,因此我认为它正在使用其父命令(很难确定-执行完命令后返回的pid消失了!)
ArtOfWarfare

2
@Kris在此用例中使用不会更简单pkill -9 -f keyword吗?
oidualc

53

尝试

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

该命令应为您提供其中带有KEYWORD的进程的PID。在这种情况下,awk从输出返回第二列中的内容。


2
因为这可以返回多个pid,所以可以通过追加来获得第一个| head -1
克里斯(Kris)

'head -1'将在某些Linux中返回grep PID,应为tail -1。
Joao Vitorino

22

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


4
也许是错字?ps -ef | grep关键字| grep -v grep | awk'{print $ 2}'
rmv

您知道如何将返回的PID传递给“ kill -9”吗?
alybadawy

3
@alybadawy只是添加| xargs kill -9到年底
patte

8

我用

ps -C "keyword" -o pid=

此命令应为您提供一个PID号。



3

要通过特定关键字终止进程,可以在~/.bashrc(linux)或~/.bash_profile(mac)中创建一个别名。

alias killps="kill -9 `ps -ef | grep '[k]eyword' | awk '{print $2}'`"

完善!在| head -1包装的末尾添加一个管道,可以使整个包装变得美观而整洁。
罗斯,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.