zombie-process

僵尸进程的定位与清理

现象

ps 中进程状态为 Z 或命令显示 <defunct>,占用 PID 但不占 CPU/内存。大量僵尸会耗尽 PID,导致新进程无法创建。

快速定位

ps -eo stat,ppid,pid,comm | awk '$1 ~ /Z/'
ps -eo pid,ppid,stat,comm | grep -E ' Z|<defunct>'
pstree -p <ppid>
cat /proc/sys/kernel/pid_max

常见根因

  1. 父进程没有调用 wait()/waitpid() 回收子进程。
  2. 父进程卡死或逻辑缺陷,长期不处理 SIGCHLD。
  3. 容器里 PID 1 不是合适的 init,子进程退出后无人回收。
  4. 短时间大量 fork,父进程处理不过来。
  5. 父进程本身是僵尸,形成链条。

修复

相关命令