如何杀死所有匹配名称的进程?
假设我想杀死包含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
从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
ps aux | grep -ie amarok | awk '{print $2}' | xargs kill -9
xargs(1):xargs – 构造参数列表并执行实用程序。 当你想把参数传给像kill
或ls
这样的东西时ls
。
使用pgrep
kill -9 $(pgrep amarok)
安全的方法是:
pkill -f amarok
我觉得这个命令killall正是你所需要的。 该命令被描述为“按名称杀死进程”。它很容易使用
killall chrome
这个命令将会终止Chrome的所有进程。这里是关于killall命令的链接
http://linux.about.com/library/cmd/blcmdl1_killall.htm
希望这个命令可以帮助你。
pkill -x完全匹配进程名称。
pkill -x amarok
pkill -f是相似的,但允许正则expression式模式。
请注意,没有其他参数(例如-x,-f)的pkill将允许在进程名称上进行部分匹配。 所以“pkill amarok”会杀死amarok,amarokBanana,bananaamarok等。
我希望-x是默认行为!
如果你想执行一个命令的输出,你可以把它放在$(...)
,但是对于你的特定任务来看看killall
和pkill
命令。
你也可以把你的输出作为一个子过程来评估,把所有的东西用back ticks或放在$()里面:
`ps aux | grep -ie amarok | awk '{print "kill -9 " $2}'` $(ps aux | grep -ie amarok | awk '{print "kill -9 " $2}')
尝试杀死-s 9 ps -ef |grep "Nov 11" |grep -v grep | awk '{print $2}'
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}'
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