在 CentOS(以及一般 Linux 系统)中,排查和处理**僵尸进程(Zombie / defunct)**通常可以按以下步骤进行。
僵尸进程是已经退出,但父进程尚未调用 wait() 回收其资源的进程,状态显示为 Z(zombie)。
僵尸进程本身不占 CPU 和内存,但会占用 PID,过多时可能导致无法创建新进程。
ps -ef | grep defunct
或
ps aux | grep ' Z'
示例:
user 1234 1200 0 10:00 ? 00:00:00 [process] <defunct>
其中 1200 是父进程 PID(PPID)。
top
查看右上角:
Tasks: 210 total, 1 zombie
ps -e -o stat | grep Z | wc -l
ps -eo pid,ppid,stat,cmd | awk '$3=="Z"'
或:
ps -l <僵尸进程PID>
重点看 PPID(父进程 ID)。
常见原因:
可查看父进程状态:
ps -p <PPID> -o pid,ppid,stat,cmd
若父进程状态为 D(不可中断睡眠)或 T(停止),需重点关注。
kill -9 <僵尸PID> # 无效
kill -TERM <PPID>
# 或
kill -9 <PPID>
父进程退出后,僵尸进程会被 init(PID 1)接管并回收。
wait() / waitpid()signal(SIGCHLD, SIG_IGN)systemctl restart <服务名>
SIGCHLDsupervisor / systemd 管理进程ps -e -o stat | grep Z | wc -l
如果你有 具体进程名 / 日志 / ps 输出,我可以帮你具体分析是哪一个服务导致僵尸进程。