我想终止以下命令产生的所有进程

我想终止以下命令产生的所有进程

以下命令将显示所有正在运行的 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'

另请注意,您的grepwillvmstat 1也匹配vmstat 10and 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)

相关内容