僵尸进程是已终止但未被父进程回收资源的进程,会占用进程表资源。及时发现需通过命令监控或自动化工具,以下是具体方法:
ps命令过滤僵尸进程ps命令是基础排查工具,通过状态码Z(Zombie)快速定位僵尸进程。常用命令:
ps aux | grep '[Zz]':列出所有状态为Z(小写)或z(大写)的进程,输出包含进程ID(PID)、父进程ID(PPID)、命令及状态。ps -A -ostat,ppid,pid,cmd | grep -e '[Zz]':更精准地输出状态、PPID、PID和命令,便于后续分析父进程。top命令实时监控top命令提供动态进程视图,可直接查看僵尸进程数量及详情:
top后,按Shift + Z键,僵尸进程会以红色高亮显示;STAT列,标注为Z的即为僵尸进程;Shift + M(按内存排序)或Shift + P(按CPU排序)可辅助排查异常进程。htop命令(增强版top)htop界面更友好,支持颜色标识和快捷操作:
sudo yum install htop(CentOS默认仓库提供);htop后,按F4键输入Z,即可过滤出僵尸进程;S列(状态)显示为Z,且会标注[defunct]。/proc文件系统/proc目录下每个子目录对应一个进程,通过status文件可查看进程状态:
cat /proc/[PID]/status | grep 'State'(将[PID]替换为疑似僵尸进程的ID);State: Z (zombie),则确认为僵尸进程。pstree命令查看进程树pstree以树状结构展示进程关系,便于识别僵尸进程的父进程:
pstree -p | grep -i defunct:显示所有僵尸进程及其PPID(父进程ID);pstree -ps | grep '[Zz]':以树状结构标注僵尸进程。sysstat工具(sar命令)sysstat是系统监控工具包,sar命令可统计僵尸进程数量:
sudo yum install sysstat;sar -q:输出系统负载及僵尸进程数(zombie字段),支持历史数据查询。通过脚本定期检查并记录僵尸进程,适合长期监控:
check_zombies.sh):#!/bin/bash
ZOMBIES=$(ps -A -o stat,ppid,pid,cmd | grep -e '[Zz]' | wc -l)
if [ $ZOMBIES -gt 0 ]; then
echo "$(date) 发现 $ZOMBIES 个僵尸进程,启动清理!" >> /var/log/zombie.log
ps -A -o stat,ppid,pid,cmd | grep -e '[Zz]' | awk '{print $2}' | xargs kill -HUP 2>/dev/null
else
echo "$(date) 未发现僵尸进程。" >> /var/log/zombie.log
fi
chmod +x check_zombies.sh;crontab -e,添加0 * * * * /path/to/check_zombies.sh。kill -9 <PPID>),若父进程是系统关键服务(如systemd),需谨慎操作;wait()/waitpid()或忽略SIGCHLD信号),需从源头修复。