如何杀死具有给定名称的所有进程?

如何杀死具有给定名称的所有进程?

我运行命令ps -A | grep <application_name>并获取进程列表,如下所示:

19440 ?        00:00:11 <application_name>
21630 ?        00:00:00 <application_name>
22694 ?        00:00:00 <application_name>

我想杀死列表中的所有进程:19440, 21630, 22694

我已经尝试过ps -A | grep <application_name> | xargs kill -9 $1,但它会出现错误。

kill: illegal pid ?
kill: illegal pid 00:00:00
kill: illegal pid <application_name>

我怎样才能优雅地做到这一点?

答案1

pkill -f 'PATTERN'

将杀死该模式匹配的所有进程PATTERN。使用该-f选项,将考虑整个命令行(即包括参数)。如果没有该-f选项,则仅考虑命令名称。

另请参阅man pkill您的系统。

答案2

问题是ps -A | grep <application_name> | xargs -n1返回这样的输出

19440
?
00:00:11
<application_name>
21630
?
00:00:00
<application_name>
22694
?
00:00:00
<application_name>

您可以使用awk首先获取一列ps输出

ps -A | grep <application_name> | awk '{print $1}' | xargs -n1

将返回 PID 列表

19440
21630
22694

添加kill -9 $1一个命令来杀死所有 PID

ps -A | grep <application_name> | awk '{print $1}' | xargs kill -9 $1

答案3

killall可以做到这一点。

$ killall application_name

答案4

我已经使用-w标志来ps捕获宽输出,以免错过任何进程名称。

ps auxww | grep -E "[a]pplication_name" | awk '{print $2}'

将返回 PID 列表

7644
407
406

接下来,如果有有效输出,则将结果通过管道传输到xargs kill -9命令中,以杀死所有相应的 PID。

ps auxww | grep -E "[a]pplication_name" | awk '{print $2}' | ifne xargs kill -9

相关内容