在Ubuntu系統中,僵尸進程(Zombie Process)是指已經結束運行但尚未被其父進程回收資源的進程。這些進程會占用系統資源,因此需要定期清理??梢酝ㄟ^編寫一個腳本來自動清理僵尸進程。以下是一個示例腳本:
#!/bin/bash
# 獲取所有僵尸進程的PID
zombie_pids=$(ps -eo pid,state,ppid,cmd --no-headers | awk '$2 == "Z" {print $1}')
# 檢查是否有僵尸進程
if [ -z "$zombie_pids" ]; then
echo "沒有僵尸進程需要清理。"
else
echo "找到以下僵尸進程:"
echo "$zombie_pids"
# 遍歷所有僵尸進程并發送SIGCHLD信號給它們的父進程
for pid in $zombie_pids; do
ppid=$(ps -o ppid= -p $pid)
echo "向父進程 $ppid 發送 SIGCHLD 信號以回收僵尸進程 $pid"
kill -s SIGCHLD $ppid
done
# 再次檢查是否有僵尸進程
zombie_pids=$(ps -eo pid,state,ppid,cmd --no-headers | awk '$2 == "Z" {print $1}')
if [ -z "$zombie_pids" ]; then
echo "所有僵尸進程已清理完畢。"
else
echo "清理僵尸進程時遇到問題,請手動檢查。"
fi
fi
cleanup_zombies.sh。chmod +x cleanup_zombies.sh
./cleanup_zombies.sh
SIGCHLD 信號,請求父進程回收資源。如果父進程沒有正確處理 SIGCHLD 信號,僵尸進程可能不會被立即回收。通過定期運行這個腳本,可以有效地清理系統中的僵尸進程,釋放系統資源。