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号进程作用的结果。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通