在CentOS系统中,僵尸进程是指已经结束但尚未被其父进程回收资源的进程。这些进程会占用进程表项,导致新的进程无法被创建,最终可能引发系统问题。以下是识别和处理CentOS系统中僵尸进程的方法:
ps
命令:ps aux | grep 'Z'
命令,这将显示所有状态为“Z”的进程,这些进程就是僵尸进程。ps -A -o stat,ppid,pid,cmd | grep -e '[Zz]'
命令,这个命令会列出所有进程的状态、父进程ID、进程ID和命令行,并通过 grep
过滤出状态为 Z 的僵尸进程。top
命令:top
命令的输出中,可以查看 Z 字段,这表示该进程是僵尸进程。Z 字段出现在 %CPU(s) 下方。/proc
文件系统:/proc/[PID]/status
文件中的状态是否为 Z,其中 [PID] 是进程ID。htop
命令(如果安装):htop
是一个增强版的 top
命令,提供了更直观的界面和更多的功能。在“Status”列中,你可以看到进程的状态。僵尸进程将显示为 “Z” 状态。pstree
命令:pstree -p | grep 'Z'
命令,这将以树状结构显示进程,并高亮显示状态为 “Z” 的僵尸进程。ps -A -o stat,ppid,pid,cmd | grep -e '[Zz]' | awk '{print 2}' | xargs kill -9
这个命令会输出所有僵尸进程的进程ID,并使用 xargs
将这些ID传递给 kill -9
命令进行杀死。
#!/bin/bash
ZOMBIES=$(ps -A -ostat,ppid,pid,cmd | grep -e '[Zz]' | wc -l)
if [ $ZOMBIES -gt 0 ]; then
echo "$(date) 发现 $ZOMBIES 个僵尸,启动清理!" | tee -a /var/log/zombie.log
ps -A -ostat,ppid,pid,cmd | grep -e '[Zz]' | awk '{print 2}' | xargs kill -HUP
fi
然后将脚本添加到 crontab
中,定期执行。