这一篇是对前面一篇的更新,也是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。
写在最后
纸上得来终觉浅,绝知此事要躬行。
大家测试一下,有问题留言反馈。