一、CentOS僵尸进程的监控方法
ps命令:通过ps aux | grep 'Z'或ps -A -o stat,ppid,pid,cmd | grep -e '[Zz]'命令,可列出所有状态为“Z”(僵尸)的进程,输出包含进程ID(PID)、父进程ID(PPID)、命令行等信息,直接定位僵尸进程。top命令:运行top命令后,按“Z”键可将僵尸进程置顶显示,或在top界面中直接查看“S”(状态)列,标记为“Z”的进程即为僵尸进程。top还能实时显示僵尸进程的数量及资源占用情况。pstree命令:通过pstree -p | grep -i defunct或pstree -ps | grep 'Z'命令,以树状结构展示进程关系,僵尸进程会在其PID后标注“[Z]”,同时显示其父进程信息,便于快速识别进程层级。sysstat工具:安装sysstat后,使用sar -q命令可监控系统进程状态,输出中包含“zombie”字段,显示当前僵尸进程的数量,适合长期统计和分析僵尸进程的变化趋势。zabbix、monit等专业监控工具,可配置僵尸进程监控项(如zabbix的“Zombie Processes”模板、“monit”的check process规则),设置阈值触发报警,实现自动化监控。二、CentOS僵尸进程的处理方法
ps或pstree命令找到僵尸进程的PID,再通过ps -o ppid= -p <僵尸PID>命令获取其父进程ID(PPID),明确父子进程关系。SIGCHLD信号(kill -s SIGCHLD <父PID>),通知其回收子进程资源;若信号无效,可强制终止父进程(kill -9 <父PID>),此时僵尸进程会被init进程(PID为1)自动回收。init)发送SIGCHLD信号(kill -s SIGCHLD 1),强制系统回收僵尸进程。#!/bin/bash
zombies=$(ps -A -ostat,ppid,pid | grep -e '[Zz]' | awk '{print $2}')
for ppid in $zombies; do
kill -9 $ppid
done
将脚本保存为cleanup_zombies.sh,添加执行权限(chmod +x cleanup_zombies.sh),并通过crontab -e设置定时任务(如每小时执行一次),实现自动化清理。三、CentOS僵尸进程的预防措施
wait()或waitpid()函数等待子进程结束,回收其资源。例如在C语言中,可通过wait(&status)阻塞等待子进程退出;在Shell脚本中,可使用wait命令等待后台子进程完成。signal(SIGCHLD, SIG_IGN),忽略SIGCHLD信号,此时子进程结束后会被init进程自动回收,避免僵尸进程产生。systemd服务(如编写.service文件),systemd会自动管理进程生命周期,包括子进程的回收,减少僵尸进程的发生。top、ps等命令定期检查系统进程状态,或使用监控工具设置僵尸进程告警,及时发现并处理异常,避免僵尸进程积累影响系统性能。