Torres-tao  
ps -e -o stat,ppid,pid,cmd | egrep "^[Zz]" | awk '{print $2}' | xargs kill -9
  • -e:用于列出所有的进程
  • -o:用于设定输出格式,这里只输出进程的stat(状态信息)、ppid(父进程PID)、pid(当前进程的PID)、cmd(进程的可执行文件)
  • egrep:Linux下的正则表达式工具,相当于grep -e
  • ^[Zz]:正则表达式,^表示第一个字符的位置,即表示第一个字符为Z或z开头的进程数据(僵尸进程)
  • awk '{print $2}':将前面命令的输出信息进行过滤,仅输出第二列的值,即ppid
  • xargs kill -9:将得到的ppid传给kill -9作为参数,也就是kill掉这些ppid

Tips

这组命令组合是将僵尸进程的父进程kill掉,进而关闭僵尸进程。为什么这么处理呢?

其实一般僵尸进程很难直接kill掉,因为僵尸进程是已经死掉的进程,它不能再接收任何信号。所以,需要kill僵尸进程的父进程,这样父进程kill掉后,僵尸进程就成了孤儿进程,而所有的孤儿进程都会交给系统的1号进程(init或systemd)收养,1号进程会周期性地去调用wait来清除这些僵尸进程。

因此,可以发现,父进程kill掉之后,僵尸进程也随之消失了,这其实是1号进程作用的结果。

posted on   雷子锅  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
 
点击右上角即可分享
微信分享提示