首页/系统/信创系统运维速查/僵尸进程的处理
常见问题65 条

僵尸进程的处理

僵尸进程本身几乎不占资源,但持续增多说明父进程未回收子进程:找到父进程修复其逻辑,杀僵尸本身没有作用。

信创系统运维速查系统更新于 2026-10-13

僵尸进程是什么

子进程退出后,父进程需要用 wait 系列调用回收它的退出状态。如果父进程没有回收,子进程的进程描述符就会一直保留,状态显示为 Z(defunct),也就是僵尸进程。它几乎不占内存也不占 CPU,但会占用 PID 与进程表条目;数量持续增长时,说明父进程存在缺陷。

基本信息

状态标识ps 输出 STAT 列的 Z(defunct)
资源占用不占内存与 CPU,占用 PID 与进程表项
处理对象持有僵尸的父进程,而不是僵尸本身
信号特性僵尸进程已终止,kill 对它无效
根因归属应用缺陷,需要修复父进程的回收逻辑

典型使用场景

  • 监控告警提示僵尸进程数量持续增加
  • 排查「进程数达到上限」导致的创建失败
  • 巡检时发现某个应用长期持有大量僵尸进程
  • 确认僵尸是否在服务重启后被清理
  • 作为应用缺陷证据提交研发修复

定位与处理

定位与处理
ps -eo pid,ppid,stat,cmd | awk '$3 ~ /Z/' | head    # 列出僵尸进程及其父进程
ps -eo stat | grep -c Z                             # 统计僵尸数量
ps -o pid,ppid,stat,cmd -p <ZOMBIE_PID>             # 查看指定僵尸与它的父进程
ps -o pid,ppid,stat,cmd -p <PPID>                   # 查看父进程当前状态
pstree -p <PPID> | head                             # 查看父进程下挂的子进程
systemctl restart app-web                           # 重启父进程服务(临时缓解)
# 长期方案:修复父进程的 wait 回收逻辑,由研发处理

现象与判读

现象含义处理方向
少量瞬时僵尸正常回收过程中的短暂状态无需处理
数量持续增长父进程未回收子进程交研发修复
重启后消失重启触发回收临时缓解,根因未解决
PID 资源告警进程表项被占满先重启缓解再定位父进程
僵尸进程杀不掉:信号对它无效。要做的是让父进程回收,或者重启父进程——父进程退出后,僵尸会被 init/systemd 接管并回收。
僵尸数量长期增长会耗尽 PID 资源,导致新进程无法创建:这属于需要跟踪的应用缺陷,不能只靠定期重启掩盖。

易错点

  • 反复 kill 僵尸进程:信号对已终止进程无效,纯属浪费时间
  • 只重启父进程不改代码:问题下一个周期就重现,属于掩盖而非修复
  • 把少量僵尸当故障处理:短暂存在的僵尸是正常回收过程的一部分
  • 忽略 PID 资源上限:僵尸增长到耗尽 PID 时会引发更大范围故障
  • 不向研发反馈并附现场证据:缺少证据,父进程缺陷无从修复

数据来源与参考

  • man 1 ps
  • man 2 wait
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌