在 CentOS(以及大多数 Linux 系统)中,僵尸进程(Zombie / defunct)本身不能直接被 kill 掉,因为它已经结束运行,只是还在进程表中保留退出状态,等待父进程回收。
下面是正确处理僵尸进程的方法,按推荐顺序说明:
ps -ef | grep defunct
# 或
ps aux | awk '$8 ~ /Z/'
看到状态为 Z(Zombie)即是僵尸进程。
僵尸进程的存在是因为父进程没有调用 wait()。
ps -o pid,ppid,stat,comm -p 僵尸PID
ps -p 父PID
systemctl restart 服务名
✅ 这是最推荐的方式
如果父进程已经异常(比如写得很差的脚本、bug 程序):
kill -9 父PID
父进程被杀后:
⚠ 注意:
kill -9 僵尸PID # 没用
原因:
kill 对它无效极少情况,可能:
解决:
通常是:
排查:
ps -eo stat | grep Z | wc -l
解决:
✅ 程序中:
wait() / waitpid()signal(SIGCHLD, SIG_IGN)✅ 脚本中:
exec✅ 服务中:
僵尸进程不能直接杀,只能让父进程回收或杀父进程。
如果你愿意,可以:
ps 输出我可以帮你具体分析是哪类问题。