我运行命令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