在 Debian(以及其它 Linux 发行版)中,“僵死进程(zombie / defunct)”是已经结束运行,但父进程还没回收它的进程。僵死进程本身不占用 CPU、内存等资源,只是占用一个进程号(PID)。
ps -l
或
ps -ef | grep defunct
如果 STAT 列是 Z,就是僵死进程。
僵死进程不能直接 kill,必须让父进程来回收。
ps -o pid,ppid,stat,cmd -p <僵尸PID>
或
ps -ef | grep <僵尸PID>
kill -9 <父进程PID>
父进程死后,僵尸会被 init(PID 1)接管并自动清理。
如果父进程是你自己的程序:
wait() / waitpid()SIGCHLD 信号如果你是普通用户、不能改代码,只能用方法 1。
kill -9 <僵尸PID> # 没用,僵尸已经“死”了
僵尸进程不能被 kill。
init(PID 1)但还是僵尸?极少见,通常是系统 bug:
说明父进程有 bug(比如服务程序没回收子进程):
systemctl restart <服务名>
僵尸进程杀不掉,只能杀它爹(父进程)或重启服务。
如果你愿意,可以把 ps 输出贴出来,我可以帮你具体看是哪个进程的问题。