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

Łuk*_*ski 35 grep process kill ps

我运行命令ps -A | grep <application_name>并获取这样的进程列表:

19440 ?        00:00:11 <application_name>
21630 ?        00:00:00 <application_name>
22694 ?        00:00:00 <application_name>
Run Code Online (Sandbox Code Playgroud)

我想从列表中杀死所有进程: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>
Run Code Online (Sandbox Code Playgroud)

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

小智 55

pkill -f 'PATTERN'
Run Code Online (Sandbox Code Playgroud)

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

另请参阅man pkill您的系统。


Łuk*_*ski 19

问题是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>
Run Code Online (Sandbox Code Playgroud)

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

ps -A | grep <application_name> | awk '{print $1}' | xargs -n1
Run Code Online (Sandbox Code Playgroud)

将返回 PID 列表

19440
21630
22694
Run Code Online (Sandbox Code Playgroud)

并添加kill -9 $1您有一个可以杀死所有 PID 的命令

ps -A | grep <application_name> | awk '{print $1}' | xargs kill -9 $1
Run Code Online (Sandbox Code Playgroud)