如何杀死匹配名称的所有进程?

时间:2011-06-17 04:07:57

标签: shell command-line kill

说我要杀死包含amarok这个词的每个进程。我可以打印出我想要执行的命令。但是我如何实际让shell执行它们。即

ps aux | grep -ie amarok | awk '{print "kill -9 " $2}'
Output:
kill -9 3052
kill -9 3071
kill -9 3076
kill -9 3077
kill -9 3079
kill -9 3080
kill -9 3082
kill -9 3083
kill -9 3084
kill -9 3085
kill -9 3086
kill -9 3087
kill -9 3088
kill -9 3089
kill -9 4031

11 个答案:

答案 0 :(得分:361)

来自man 1 pkill

-f     The pattern is normally only matched against the process name.
       When -f is set, the full command line is used.

这意味着,例如,如果我们在ps aux中看到这些行:

apache   24268  0.0  2.6 388152 27116 ?        S    Jun13   0:10 /usr/sbin/httpd
apache   24272  0.0  2.6 387944 27104 ?        S    Jun13   0:09 /usr/sbin/httpd
apache   24319  0.0  2.6 387884 27316 ?        S    Jun15   0:04 /usr/sbin/httpd

我们可以使用pkill -f选项杀死所有人:

pkill -f httpd

答案 1 :(得分:187)

ps aux | grep -ie amarok | awk '{print $2}' | xargs kill -9 

xargs(1):xargs - 构造参数列表和执行实用程序。想要将参数输入到killls等内容时很有用。

答案 2 :(得分:45)

使用pgrep

kill -9 $(pgrep amarok)

答案 3 :(得分:25)

安全的方法是:

pkill -f amarok

答案 4 :(得分:17)

我认为这个命令killall正是你所需要的。 该命令被描述为“按名称杀死进程”。它易于使用。例如

killall chrome

此命令将终止Chrome的所有进程。这是一个关于killall命令的链接

http://linux.about.com/library/cmd/blcmdl1_killall.htm

希望这个命令可以帮到你。

答案 5 :(得分:11)

pkill -x完全匹配进程名称。

pkill -x amarok

pkill -f类似但允许使用正则表达式。

请注意,没有其他参数的pkill(例如-x,-f)将允许对进程名称进行部分匹配。所以" pkill amarok"会杀死amarok,amarokBanana,bananaamarok等。

我希望-x是默认行为!

答案 6 :(得分:4)

如果要执行命令的输出,可以将其放在$(...)内,但是对于您的特定任务,请查看killallpkill命令。

答案 7 :(得分:3)

您还可以将输出作为子流程进行评估,将所有内容包含在后面的刻度中或将其放在$()中:

`ps aux | grep -ie amarok | awk '{print "kill -9 " $2}'`

 $(ps aux | grep -ie amarok | awk '{print "kill -9 " $2}')     

答案 8 :(得分:3)

尝试 kill -s 9 ps -ef |grep "Nov 11" |grep -v grep | awk '{print $2}' 杀死11月11日的进程 要么 kill -s 9 ps -ef |grep amarok|grep -v grep | awk '{print $2}' 杀死包含单词amarok

的进程

答案 9 :(得分:0)

可能将命令添加到可执行文件,设置+ x权限然后执行?

ps aux | grep -ie amarok | awk '{print "kill -9 " $2}' > pk;chmod +x pk;./pk;rm pk

答案 10 :(得分:0)

如果你正在使用cygwin或一些缺少killall的小shell,你可以使用这个脚本:

killall.sh - 按进程名称终止。

#/bin/bash
ps -W | grep "$1" | awk '{print $1}' | xargs kill -f;

用法:

$ killall <process name>