Linux 查看僵尸进程数量与信息
在 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)中设置告警阈值。