Linux进程批量杀死,一行命令全搞定,加强修复版

2020-04-08 11:39:38 浏览数 (1)

这一篇是对前面一篇的更新,也是bug修复。

回顾

上一个版本,我们推荐在Linux下,使用管道符,使用了4个工具,5个指令,将进程中不想使用的PIDs,进行批量kill操作。

使用工具如下:

ps aux | grep thread_name | grep -v grep | cut -c 9-15 | xargs kill -9

功能再分析

注意,上一条,我们使用cut这个裁切文本工具。

正如一位专业人士指出的那样,这样写是有bug的!

如果PID号超过7位,怎么办?

是的,使用 cut -c选项,将所有字符,单个批开,然后用固定位置截取PID,7位以下,可以做到拿到正确的PID号。

话说,Linux进程号,可能达到7位吗?

完全可能!

Bug修复

上面的命令行如何修改?

我们注意到,其实关键因素是ps的输出,以及cut的裁切。

cut:我们使用了-c选项,用于挨个字符串切割,然后定位,这样做短期可以,超过15 - 9 1 = 7位,极其危险。 因为,如果你用的root权限执行,kill掉的,可能是一个重要的应用进程。

线上很有可能瘫痪的。

Awk工具

是时候祭出重量级编程工具语言——awk了!

上面的命令行这样写:

ps aux | grep thread_name | grep -v grep | awk -F " " '{print $2}' | xargv kill -9

为什么awk可以?

因为awk使用的-F分隔符自动去除了无效的连续空格。

所以,只要ps aux的输出顺序不变,awk拿到的$2,就永远是PID。

写在最后

纸上得来终觉浅,绝知此事要躬行。

大家测试一下,有问题留言反馈。

0 人点赞