简短结论:一般来说不用特意“管”,但要看数量和来源。
下面说清楚:
wait() / waitpid() 回收它✅ 少量僵尸进程(几个、几十个)
✅ 系统运行正常
✅ 父进程是短期任务或会很快退出
这是 Linux 的正常现象,不需要手动 kill。
ps aux | grep Z
或:
ps -ef | grep defunct
❌ 僵尸进程越来越多(几百、上千)
❌ 系统 PID 快用完(cannot fork)
❌ 某个服务长期不回收子进程(程序 bug)
这种情况说明:
不能。
kill -9 僵尸PID # 没用
因为僵尸已经“死”了,只是没被收尸。
✅ 正确做法:
pkill -9 父进程名
# 或
kill -9 父PID
⚠️ 注意:杀父进程可能影响服务,生产环境要谨慎。
fork() 但没回收如果你愿意,可以贴一下:
ps -ef | grep defunct
或者父进程是什么,我可以帮你判断是不是真有问题。