Shell 如何终止与名称匹配的所有进程?

Shell 如何终止与名称匹配的所有进程?,shell,command-line,kill,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 k

假设我想杀死所有包含单词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
xargs1:xargs-构造参数列表并执行实用程序。当您想将参数导入kill或ls等对象时,这将非常有用。

使用pgrep


如果要执行命令的输出,可以将其放在$…,但是对于特定的任务,请查看killall和pkill命令。

您还可以将输出作为一个子进程进行评估,方法是使用反勾号或将其放在$:

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

 $(ps aux | grep -ie amarok | awk '{print "kill -9 " $2}')     
从男人1号开始

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

我们可以使用pkill-f选项将它们全部杀死:


我认为这个命令正是你需要的。 该命令按名称描述为kill进程。它易于使用。例如

killall chrome
这个命令将杀死Chrome的所有进程。这里有一个关于killall命令的链接

希望此命令可以帮助您。

安全的方法是:


pkill-x与进程名完全匹配

pkill -x amarok
pkill-f类似,但允许使用正则表达式模式

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

我希望-x是默认行为

尝试kill-s9`ps-ef | grep Nov 11 | grep-v grep | awk'{print$2}`来终止11月11日的进程 或 kill-s9`ps-ef | grep amarok | grep-v grep | awk'{print$2}`
要杀死包含单词amarok的进程,可以将命令添加到可执行文件中,设置+x权限,然后执行吗

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

如果您使用的是cygwin或缺少killall的最小shell,则可以使用以下脚本:

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

我意识到这并没有解决这个问题的主题,但它确实展示了一种替代的、更短的方法来做你想做的事情。为了获得额外的力量,在末尾加上-9!它也会杀死httpdx进程吗?I pkill vi,它杀死了单词中包含“vi”的supervisorctl。真棒-Ubuntu 18.04.1 lts对于不区分大小写的匹配使用-I,就像pkill-fi wine一样。要在之前和之后进行验证,请使用ps-uax | grep-i wine。在命令行的其余部分后添加| sh-x?永远不要在流程上使用kill-9请参见[process management][1][1]:…在上面的评论中添加kill-9不仅是个坏主意,而且您正试图通过其名称杀死多个流程。进程的名称没有什么独特之处,因此不适合识别。关于不使用-9的那篇文章是毫无帮助的。关于为什么人们不应该使用它,有没有更好的信息?它只是说不要,并解雇使用它的人;但是我在其他地方所看到的是kill-9{pid}是如何杀死某些东西…通常当我想要杀死一个进程时,因为它被卡住了,并且它没有响应任何其他kill命令。我实际使用kill命令的唯一一次是,如果某个东西被可怕地冻结,然后我用-9强制它。更优雅的是:pkill-9 amarokpkill以本机方式处理包含单词part的每个进程,而不创建更多管道或进程。请参阅-f选项进行完整进程名搜索,以消除对pgrep的需要。请注意,默认情况下,pkill允许对进程名进行部分匹配。如果amarok2存在,这个命令也会杀死它。如果要指定确切的名称,请使用-x或-f。如果pgrep与全名匹配不匹配,则将失败。使用kill-9$pgrep-f amarokPoints来提及xargs-所有这些pgrep/pkill内容都很好,但xargs是一个通用工具,在每个linux/unix.kill上都是标准的:没有这样的进程,这是因为它也试图杀死已经完成的grep进程。这应该没问题。有一个小技巧可以避免捕获grep过程:ps aux|grep-ie[a]marok{print$2}awk{print$2}xargs kill-9您还可以添加另一个grep调用来过滤grep我发现这更容易阅读/记住ps aux|grep-ie amarok{grep-v grep{print$2}“| xargs kill-9 grep-v代表grep-inverto要添加到这一点,我添加了-l标志。实际上,我只是将pkill别名为pkill-fl,这样我就可以运行类似于pkilljboss的东西,它会吐出它刚刚杀死的进程。它也会杀死amarokx进程吗?我猜是vi,它杀死了单词中包含“vi”的supervisorctl。这和Tim的答案有什么不同?仅与示例名称匹配,否则看起来相同@ndland pkill:无效选项-'l'-procps ng 3.3.12中的pkill是否也会杀死amarokx进程?我会杀了vi,它杀死了单词中包含“vi”的supervisorctl。@Gank,是的,任何在某处有amarok的进程名。如何只杀死amarok而不是amarokx?@Gank,-x标志。pkill-x Amarok为什么不是默认值。真的吗
范围我杀死了太多进程,因为我没有使用-x:|这只按名称匹配,而不是完整的命令行。绝对不同于搜索ps aux的输出I'm getting kill:无效参数fTry将-f替换为-
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 httpd
killall chrome
pkill -f amarok
pkill -x amarok
ps aux | grep -ie amarok | awk '{print "kill -9 " $2}' > pk;chmod +x pk;./pk;rm pk
#/bin/bash
ps -W | grep "$1" | awk '{print $1}' | xargs kill --
$ killall <process name>