2011-06-17 81 views
171

假设我想杀死包含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 
+0

Add'| |在命令行的其余部分之后是sh -x? – 2011-06-17 05:00:46

+3

在进程中永远不会使用'kill -9'参见[进程管理] [1] [1]:http://mywiki.wooledge.org/ProcessManagement?highlight=%28%5CbCategoryUnix%5Cb%29#I .27m_trying_to_kill_-9_my_job_but_blah_blah_blah ... – 2011-06-17 08:14:51

+0

添加到上面的评论中,不仅是kill -9是一个糟糕的主意,而且还有一个事实,即您试图通过其名称杀死多个进程。对于一个过程的名称没有任何独特之处,因此是识别的一个不好的候选者。 – 2014-12-02 21:47:06

回答

279

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 
+0

我意识到这不能解决这个问题的主题,但它确实展示了一种替代的和更短的方法来做你正在尝试的去做。 – 2011-06-17 04:19:08

+7

如需额外强度,请在末尾加上'-9'! – mlissner 2015-08-05 03:31:29

+0

在ubuntu中完美工作14.04 – zhihong 2015-09-03 08:22:39

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

xargs的(1):xargs的 - 构造参数列表(一个或多个),并执行程序。当你想将参数传递给killls等等时很有用。

+3

提及xargs的要点 - 所有这些pgrep/pkill的东西都很好,但xargs是一个通用工具,在每个linux/unix上都是标准的。 – chrisdowney 2011-06-18 12:44:50

+2

“杀死:没有这样的进程” – Cerin 2014-01-13 21:58:57

+2

Cerin这是因为它试图杀死grep进程,它已经完成。应该没问题。 – 2014-06-18 23:47:54

40

使用pgrep

kill -9 $(pgrep amarok) 
+20

甚至是最好的:'pkill -9 amarok' – 2011-06-17 11:21:16

+1

pkill在本地处理“包含单词”的每个进程部分,而不创建更多的管道或进程。查看完整进程名称搜索的-f选项以消除对pgrep的需求。 – 2011-06-18 08:08:37

+2

我同意'pkill' – 2011-06-20 06:40:04

4

如果要执行一个命令的输出,你可以把它里面$(...),但是针对特定的任务来看看在killallpkill命令。

+0

+1指向killall – jm666 2011-06-17 09:23:24

3

您也可以评价为一个子进程的输出,通过周围的背部蜱一切或把它里面$():

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

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

我觉得这个命令killall是你所需要的东西。 该命令被描述为“杀死通过名称过程”。它的易于使用。例如

killall chrome 

此命令将杀死Chrome.Here的所有过程是一个大约killall命令链接

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

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

19

的安全的方式来做到这一点是:

pkill -f amarok 
+1

要添加到此,我添加了'-l'标志。我实际上只是将'pkill'命名为'pkill -fl',这样我就可以运行'pkill jboss'之类的东西了,它会吐出它刚刚杀死的进程。 – ndland 2015-12-10 16:45:00

+0

它也会杀死amarokx进程吗?我玩vi,它杀死了'supervisorctl',其中包含'vi'的单词。 – Gank 2015-12-12 02:44:38

8

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

pkill -x amarok 

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

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

我希望-x是默认行为!

+0

它也会杀死amarokx进程吗?我玩vi,它杀死了'supervisorctl',其中包含'vi'的单词。 – Gank 2015-12-12 02:43:58

+0

@Gank,是的,任何进程名称与“amarok”在某处。 – user79878 2015-12-16 00:11:16

+0

如何杀死amarok而不是amarokx? – Gank 2015-12-16 05:14:18

3

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

0

也许添加命令可执行文件流程,设置+ X许可然后执行?

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

这不提供问题的答案。一旦你有足够的[声誉](https:// stackoverflow。com/help/whats-reputation)你将能够[对任何帖子发表评论](https://stackoverflow.com/help/privileges/comment);相反,[提供不需要提问者澄清的答案](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- I-DO-代替)。 - [来自评论](/ review/low-quality-posts/16871558) – Parfait 2017-07-30 20:00:55