简短结论:僵尸进程(zombie)本身不是 bug,它是 Unix/Linux 进程机制的正常现象;但如果系统中长期大量存在僵尸进程,通常是程序或系统管理上的问题(可能算 bug 或运维问题)。
下面详细说一下。
在 Linux/Ubuntu 中:
wait() / waitpid() 来“收尸”ps aux | grep Z
或
ps -l
状态为 Z 的就是僵尸进程。
wait() 回收这是完全正常的操作系统行为。
如果满足以下情况,一般说明有问题:
常见原因:
wait()这种情况下:
代码逻辑有缺陷,可以认为是 bug(应用层 bug)
Ubuntu 本身:
init / systemd 会回收孤儿进程所以:
fork: Resource temporarily unavailable)ps -ef | grep defunct
ps -o ppid= -p <僵尸PID>
wait() 子进程kill -TERM <父进程PID>
kill -9 <僵尸PID> # 无效
只能杀父进程,让 init 接管并回收。
僵尸进程不是 Ubuntu 的 bug,而是进程模型的一部分;
长期存在的僵尸进程,通常是程序没写好,属于应用 bug 或运维问题。
如果你愿意,可以把 ps 输出或具体程序贴出来,我可以帮你判断是不是真有问题。