以下命令将显示所有正在运行的 PID vmstat1
:
ps -ef | grep "vmstat 1" | awk '{ print $2 }'
我的问题是,如果同时有 20 个这样的人,我该如何杀死他们呢?
答案1
如果您的命令生成 PID 列表,则只需将其通过管道输入:
xargs kill
请注意,您的命令也将与 grep 命令匹配,因此请考虑|grep -v grep
在原始grep
命令之前添加类似的内容。
答案2
只需使用pkill
.虽然不是标准命令,但在许多 Unices 中都可以找到它,并且专门用于此类任务。
pkill -f 'vmstat 1'
另请注意,您的grep
willvmstat 1
也匹配vmstat 10
and grep vmstat 1
(上面的也如此pkill
),并且awk
是 的超集grep
。为了更强大,你可以这样做:
ps -Ao pid,args | awk '$2 == "vmstat" && $3 == "1" {print $1}' | xargs kill
或者
pkill -xf 'vmstat 1'
答案3
如果你已经在使用 awk,你可以这样做
ps -ef | grep "vmstat 1" | awk '!/grep/{ print "kill " $2 }' | bash
它将输出一个终止命令列表,并且由于每个命令都会终止一个进程,因此您不会遇到太长的潜在参数列表(尽管在运行进程时不太可能),并且我添加了一种模式来避免匹配 grep 进程本身,因为杀死它可能会缩短您的列表。
答案4
很简单:
$ kill -9 $(pgrep -f vmstat)