以下是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)可能导致数据丢失,需谨慎使用。