简短结论:大多数情况下不用专门“管”,但要看数量和成因。
下面分情况说明:
僵尸进程是已经结束运行、但父进程还没回收它(wait)的进程,在 ps 里状态通常是 Z 或 <defunct>。
它本身:
所以:少量僵尸进程一般无害。
例如:
systemd / init(PID 1)这种情况:不用处理。
出现以下情况就要注意了:
比如:
可能问题:
wait()风险:
例如:
可能影响业务稳定性。
ps aux | awk '$8 ~ /Z/'
或:
top
# 看 Tasks: xx total, xx zombie
看父进程:
ps -o pid,ppid,stat,cmd -p <僵尸PID>
不要直接 kill 僵尸进程(kill 无效)。
正确做法:
kill -TERM <父进程PID>
父进程退出后,僵尸会被 init 接管并回收。
⚠️ 如果是重要服务,先确认影响。
如果是你自己写的程序:
wait() / waitpid()signal(SIGCHLD, SIG_IGN)僵尸进程本身不可怕,持续产生才可怕。
如果你愿意,可以把:
ps 输出发出来,我可以帮你判断“要不要管、怎么管”。