如何给出通过管道杀死的参数


84

我需要搜索某个进程并杀死该进程。我写了这样的命令:

ps -e | grep dmn | awk '{print $1}' | kill

进程名称为dmn。但这是行不通的。如何按名称及其名称查找流程kill

Answers:


161
kill $(ps -e | grep dmn | awk '{print $1}')

8
使用更新的$()语法:kill $(ps -e | grep dmn | awk '{print $1}')
Stratus3D 2015年

7
对于其他人,我不得不修改此答案以使其起作用:kill $(ps -efw | grep dmn | grep -v grep | awk '{print $2}')不知道为什么,也不太在意它。
joshweir

1
@joshweir这是因为否则kill尝试杀死甚至试图搜索该模式的“ grep”进程
意为

\n每次awk之后都不需要awk '{print $1"\n"}'吗?
Sopalajo de Arrierez,2016年

43

如果要删除多个进程,可以使用以下命令:

ps -efw | grep dmn | grep -v grep | awk '{print $2}' | xargs kill

注意:您需要从输出中删除grep进程本身,这就是为什么grep -v grep要使用它。


17
您可以通过将第一个字符放在方括号中来避免grep出现在grep中,例如:grep [d] mn
Oldskool

1
@Oldskool好招。使用元字符使grep正则表达式自身不匹配是一个好主意。
jcollado 2011年

@ Oldskool,+ 1,你真是个天才!
jcr

不错的技巧,尽管它的确使变成shell脚本变得更加复杂
Metagrapher

17

你可以用

pkill dmn 

如果您的系统具有pkill命令


1
+1杀死pkill而不是killall。它可在没有不同“含义”的多个平台上使用(例如,Solaris上的killall等同于Linux上的killall5-也就是说,杀死所有进程)
plundra 2011年

4

只是添加其他内容,但我喜欢使用awk的regex功能:

kill $(ps | awk '/dmn/{print $1}')

4

如果您pidof的系统上有该命令(除非我弄错了,否则我知道默认情况下ZSH这样的shell附带此命令),您可以执行类似的操作。

kill -9 $(pidof dmn)


2

您可能不需pipe要这样做,如果您有pidof命令并且知道图像名称,则可以这样操作:

kill $(pidof synergyc)

$()我理解这一点,因为它将输出转换为kill可以使用的变量,就像管道会做的那样。与其他一些选项相比,它更短,更容易理解,但也可能不够灵活和直接。


0
for procid in $(ps -aux | grep "some search" | awk '{print $2}'); do kill -9 $procid; done

朋友你好..我们可以用for循环来实现。

“ Some search”是您要搜索的任何进程名称,例如“ java”,因此可以说java进程的数量为200+,因此一个接一个的杀死是太典型的。

因此您可以使用上述命令。

谢谢。


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.