简短结论:大多数情况下不需要专门“管”,但要搞清楚来源;如果数量持续增长就必须处理。
下面说人话版:
僵尸进程是已经结束运行,但父进程还没调用 wait() 回收它的进程。
特点:
Z所以:
一两个僵尸进程,一般不用慌
以下情况通常不用处理:
init / systemd(PID 1),它会定期回收例如:
ps -ef | grep defunct
只有 1~2 个,且长期不变 → 基本无害
出现以下情况要处理:
ps 很慢、无法新建进程)⚠️ 僵尸进程杀不掉(kill -9 也没用),只能:
ps -ef | grep defunct
# 或
ps -eo pid,ppid,stat,cmd | awk '$3=="Z"'
看 PPID(父进程 ID)
pstree -p | grep -A5 -B5 <僵尸PID>
wait)systemctl restart xxx
杀父进程:
kill -9 父PID
⚠️ 可能影响业务
waitpid()SIGCHLD 并 fork 后 execsystem() / 线程代替频繁 fork僵尸进程本身不可怕,持续增长才可怕;别乱 kill,找父进程才是正解。
如果你愿意,可以把 ps 输出贴出来,我帮你判断要不要管。