centos

centos僵尸进程处理工具

小樊
38
2025-12-31 10:08:34
栏目: 智能运维

CentOS 僵尸进程处理工具与命令清单

一、快速判断与定位工具

二、清理僵尸进程的正确方法

三、一键脚本示例

#!/usr/bin/env bash
set -euo pipefail

zombies=$(ps -A -o stat,ppid,pid,cmd | awk '$1 ~ /^[Zz]/ {print $2}' | sort -u)

if [[ -z "$zombies" ]]; then
  echo "未检测到僵尸进程(状态为 Z/z)。"
  exit 0
fi

echo "发现僵尸进程对应的父进程PPID列表:"
echo "$zombies"

for ppid in $zombies; do
  if [[ "$ppid" -eq 1 ]]; then
    echo "PPID=$ppid 为 PID 1(init/systemd),跳过以避免影响系统。"
    continue
  fi
  echo "向父进程 $ppid 发送 SIGCHLD ..."
  kill -s SIGCHLD "$ppid" 2>/dev/null || true

  # 短暂等待回收
  sleep 2

  # 若仍存在,尝试温和终止父进程
  if ps -p "$ppid" >/dev/null 2>&1; then
    echo "父进程 $ppid 仍存在,发送 SIGTERM ..."
    kill -15 "$ppid" 2>/dev/null || true
    sleep 5
  fi

  # 最后手段
  if ps -p "$ppid" >/dev/null 2>&1; then
    echo "父进程 $ppid 仍未退出,发送 SIGKILL ..."
    kill -9 "$ppid" 2>/dev/null || true
  fi
done

# 复核
left=$(ps -A -o stat,ppid,pid,cmd | awk '$1 ~ /^[Zz]/ {print $2}' | sort -u | wc -l)
echo "清理完成,当前剩余僵尸进程数量:$left"

四、常见误区与建议

0
看了该问题的人还看了