简短结论:一般不用特意管,但要看数量和产生原因。
僵尸进程(Zombie / defunct)是已经退出、但父进程还没调用 wait() 回收它的进程。
它不占 CPU、不占内存(基本只留一个 task_struct 用于保存退出状态)。
在 ps 里常见状态:
STAT = Z
或
ps aux | grep defunct
✅ 偶尔出现 1~2 个僵尸进程
✅ 父进程很快会回收(如 shell、systemd)
✅ 系统运行正常、没有堆积
这种情况完全无害,不用处理。
❌ 僵尸进程越来越多
❌ 某个服务一直产生僵尸(如 Java / Python / C 程序 bug)
❌ 父进程是长驻进程且不回收子进程
后果:
ps -l
# 或
ps -eo pid,ppid,stat,cmd | grep Z
✅ 杀父进程(通常是重启服务)
kill -TERM 父进程PID
父进程死后,僵尸会被 init/systemd 接管并回收。
❌ 不要直接 kill 僵尸进程(kill 不了)
如果是你自己写的程序:
wait() / waitpid()signal(SIGCHLD, SIG_IGN)| 情况 | 是否需要管 |
|---|---|
| 偶尔几个 | ❌ 不用 |
| 持续增多 | ✅ 要查父进程 |
| 服务异常 | ✅ 重启/修代码 |
如果你愿意,可以贴一下:
ps -eo pid,ppid,stat,cmd | grep Z
我可以帮你判断是不是真有问题。