在 Ubuntu(以及其他 Linux 系统)中,僵尸进程(Zombie / defunct)本身已经结束运行,只是还在进程表里留下一条记录,等待父进程读取退出状态。因此:
你不能直接“杀死”僵尸进程,只能让它的父进程回收它,或结束父进程。
下面按常见情况一步步说明。
ps aux | grep Z
或:
ps -l
如果 STAT 列显示 Z 或 Z+,就是僵尸进程。
查看僵尸进程的父进程 PID(PPID):
ps -o pid,ppid,stat,comm -p <僵尸PID>
如果是你自己的程序:
wait() / waitpid()SIGCHLD(不推荐长期方案)如果父进程是普通程序(如某个服务、脚本):
kill -9 <父进程PID>
父进程死后:
init(PID 1)接管init 会自动回收僵尸进程 ✅⚠️ 注意:
pstree -p <僵尸PID> 看关系例如是 nginx、python、docker 产生的:
systemctl restart <服务名>
❌ kill -9 <僵尸PID>
→ 无效,僵尸已经“死”了
❌ 大量僵尸但不处理父进程
→ 进程表可能被占满
如果是 systemd(PID 1)下有僵尸:
systemctl daemon-reexec
signal(SIGCHLD, SIG_IGN)systemd / supervisor 管理进程如果你愿意,可以把:
ps -l
或
pstree -p | grep Z
的输出贴出来,我可以帮你具体分析该杀哪个父进程。