在 Linux 系统中,僵尸进程(Zombie Process) 是指已经结束但其父进程未调用 wait() 或 waitpid() 回收其退出状态的子进程。这类进程仍然保留在进程表中,状态为 Z(Zombie),虽然不占用 CPU 和内存资源,但长期不处理可能导致系统资源耗尽。

本文介绍如何查看 Linux 系统中的僵尸进程数量与详细信息。

查看僵尸进程数量

使用 ps 和 grep 命令统计僵尸进程数:

ps -eo stat | grep -c '^Z'

• ps -eo stat:列出所有进程的状态字段。
• grep -c '^Z':统计以 Z 开头的行数,即为僵尸进程数。

查看僵尸进程详细信息

ps -eo pid,ppid,state,cmd | awk '$3=="Z"{print}'

输出示例:

12345  6789  Z  [some_process] <defunct>

字段说明:
• PID:僵尸进程的进程 ID
• PPID:其父进程 ID
• STATE:进程状态,Z 表示 Zombie
• CMD:进程命令行,一般显示为

按父进程统计僵尸进程数量

可用于快速定位是哪个父进程未正确回收子进程:

ps -eo ppid,state | awk '$2=="Z"{count[$1]++} END{for (pid in count) print count[pid], pid}' | sort -nr

输出示例:

5  1023
2  1

表示:
• PID 为 1023 的父进程产生了 5 个僵尸子进程;
• PID 为 1(通常为 init 或 systemd)收养了 2 个僵尸进程。


补充说明

• 僵尸进程本身不会占用 CPU 或内存资源,但进程表是有限的,太多僵尸可能导致无法创建新进程。
• 如果发现某个进程不断产生僵尸进程,建议检查代码中对子进程的回收逻辑,确保使用 wait() 或设置信号处理函数 SIGCHLD。

附加建议

如需自动监控僵尸进程,可配合 cron 编写定时检测脚本,或在系统监控工具(如 Zabbix、Prometheus)中设置告警阈值。

标签: linux, 僵尸进程

添加新评论