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 2024-12-30 20:16  雷子锅  阅读(17)  评论(0编辑  收藏  举报