以下是CentOS清理僵尸进程的常用脚本及方法:
基础回收脚本:通过发送SIGCHLD信号通知父进程回收资源。
#!/bin/bash
zombie_pids=$(ps -eo pid,state,ppid,cmd --no-headers | awk '$2 == "Z" {print $1}')
for pid in $zombie_pids; do
ppid=$(ps -o ppid= -p $pid)
kill -s SIGCHLD $ppid
done
强制终止父进程脚本:若父进程无响应,强制终止以回收僵尸进程。
#!/bin/bash
zombie_pids=$(ps -eo pid,state,ppid,cmd --no-headers | awk '$2 == "Z" {print $1}')
for pid in $zombie_pids; do
ppid=$(ps -o ppid= -p $pid)
kill -9 $ppid
done
定时清理脚本:结合cron定时执行,例如每30分钟检查一次。
#!/bin/bash
if [ $(ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]' | wc -l) -gt 0 ]; then
ps -A -ostat,ppid,pid,cmd | grep -e '[Zz]' | awk '{print $2}' | xargs kill -HUP
fi
使用方式:保存为zombie_killer.sh,赋予执行权限后添加到crontab:
crontab -e
*/30 * * * * /path/to/zombie_killer.sh
注意:优先尝试正常回收(发送SIGCHLD),强制终止(kill -9)可能导致数据丢失,需谨慎使用。