在 CentOS(以及所有 Linux 系统)中,僵尸进程(Zombie / defunct)本身已经“死”了,所以你“杀不死”它——这不是 bug,而是正常机制。下面把原因和正确处理方式说清楚。
exit()Z)所以:
kill -9 PID
对僵尸进程无效,因为它:
僵尸进程的作用是:
让父进程能够获取子进程的退出状态
内核会保留子进程信息,直到父进程调用:
wait() / waitpid()
常见原因只有一种:
可能情况:
wait()查看方法:
ps -l
或
ps -eo pid,ppid,stat,cmd | grep Z
你会看到:
STAT=Z
PPID=某个正常进程
kill -9 父进程PID
之后:
init(PID 1)接管init 会自动 wait() 回收⚠️ 注意:
例如:
systemctl restart nginx
systemctl restart php-fpm
kill -9 僵尸PIDpkill -9 僵尸/proc/PID这些都不可能杀死僵尸进程
wait() / waitpid()signal(SIGCHLD, SIG_IGN)僵尸进程杀不死,是因为它已经死了;你真正要处理的是“不回收它的父进程”。
如果你愿意,可以把:
ps -eo pid,ppid,stat,cmd
的输出贴出来,我可以帮你定位是哪个父进程导致的。