简要结论:不能简单忽视,但要看数量和产生频率。
一、什么是僵尸进程(Zombie)
- 子进程结束后,父进程没有调用
wait() / waitpid() 回收
- 进程已“死”,但仍在进程表中保留一条记录(状态
Z)
- 不占 CPU、不占内存,只占一个 PID 和进程表项
二、什么时候可以“暂时不管”
✅ 以下情况通常问题不大:
- 只有 个别僵尸进程
- 僵尸进程 不再持续增长
- 系统 PID 使用量远低于上限(
cat /proc/sys/kernel/pid_max)
例如:
ps -ef | grep defunct
只有 1~2 个,且长期不变
三、什么时候必须处理(不能忽视)
❌ 以下情况要重视:
- 僵尸进程持续增多
- 系统出现:
- 新进程无法启动
fork: Resource temporarily unavailable
- 父进程是重要服务(如 Java、Python、Nginx worker)
原因:
- 进程表被占满
- 父进程逻辑有 bug 或信号处理逻辑错误
四、常见正确处理方式
1️⃣ 找到父进程
ps -o pid,ppid,stat,cmd -C <进程名>
ps -ef | grep defunct
2️⃣ 让父进程回收(推荐)
- 修复程序(正确
wait)
- 或重启父进程(优先于杀僵尸)
kill -TERM 父进程PID
3️⃣ 僵尸进程本身不能直接 kill
kill -9 僵尸PID
4️⃣ 极端情况
- 父进程是
init(PID 1)且一直不回收
- 只能重启系统(CentOS 6/7 少见,容器环境更常见)
五、CentOS 特别说明
- CentOS 7:
systemd 作为 PID 1,一般会自动回收孤儿进程
- 容器 / chroot 环境更容易出现僵尸堆积
六、建议
✅ 生产环境:
- 监控僵尸进程数量(Z 状态)
- 告警阈值建议:> 5~10 且持续增长
如果你愿意,可以贴一下:
ps -ef | grep defunct
我可以帮你判断是不是真有风险。