Shell脚本如何监控僵尸进程数量

wen 实用脚本 2

在Shell脚本中监控僵尸进程数量,可以通过多种方式实现,以下是几种常用的方法:

Shell脚本如何监控僵尸进程数量

使用ps命令统计僵尸进程

#!/bin/bash
# 统计僵尸进程数量
zombie_count=$(ps aux | awk '{if ($8 == "Z") print $0}' | wc -l)
# 或更简洁的方式
zombie_count=$(ps aux | grep -c "Z")
echo "当前僵尸进程数量: $zombie_count"

使用/proc文件系统

#!/bin/bash
# 通过/proc文件系统统计僵尸进程
zombie_count=$(grep -c "state[[:space:]]*Z" /proc/*/status 2>/dev/null)
echo "当前僵尸进程数量: $zombie_count"

完整的监控脚本(带告警功能)

#!/bin/bash
# 配置参数
ZOMBIE_THRESHOLD=5  # 告警阈值
LOG_FILE="/var/log/zombie_monitor.log"
# 获取僵尸进程数量
get_zombie_count() {
    ps aux | awk '{if ($8 == "Z") print $0}' | wc -l
}
# 获取僵尸进程详细信息
get_zombie_detail() {
    ps aux | awk '{if ($8 == "Z") print $0}'
}
# 发送告警(示例:输出到日志,实际可改为邮件、短信等)
send_alert() {
    local count=$1
    local timestamp=$(date "+%Y-%m-%d %H:%M:%S")
    echo "[$timestamp] 警告:发现 $count 个僵尸进程!" >> "$LOG_FILE"
    get_zombie_detail >> "$LOG_FILE"
}
# 主监控逻辑
main() {
    local current_count=$(get_zombie_count)
    echo "当前僵尸进程数量: $current_count"
    # 检查是否超过阈值
    if [ "$current_count" -gt "$ZOMBIE_THRESHOLD" ]; then
        send_alert "$current_count"
        echo "已发送告警,详情请查看日志: $LOG_FILE"
    fi
}
# 执行主函数
main

定时监控脚本(配合crontab使用)

#!/bin/bash
# 监控脚本 - 每5分钟检查一次
INTERVAL=300  # 5分钟
while true; do
    zombie_count=$(ps aux | awk '{if ($8 == "Z") print $0}' | wc -l)
    current_time=$(date "+%Y-%m-%d %H:%M:%S")
    echo "[$current_time] 僵尸进程数: $zombie_count"
    # 可以添加条件判断,例如超过阈值时报警
    if [ "$zombie_count" -gt 10 ]; then
        echo "警告:僵尸进程数量异常!" > /dev/stderr
        # 这里可以添加发送邮件、写入系统日志等操作
    fi
    sleep $INTERVAL
done

使用top命令(另一种方式)

#!/bin/bash
# 使用top命令监控僵尸进程
zombie_count=$(top -bn1 | grep "Zombie" | awk '{print $NF}')
if [ -z "$zombie_count" ]; then
    zombie_count=0
fi
echo "当前僵尸进程数量: $zombie_count"

使用方法

  1. 直接运行

    chmod +x zombie_monitor.sh
    ./zombie_monitor.sh
  2. 配合crontab实现定期监控

    # 编辑crontab
    crontab -e

添加以下行(每5分钟执行一次)

/5 * /path/to/zombie_monitor.sh


3. **作为系统服务**:
可以创建一个systemd服务文件来实现持续监控。
## 注意事项
- 僵尸进程通常无法被`kill`命令杀死,需要处理其父进程
- 大量僵尸进程可能表示系统存在问题
- 建议将监控集成到现有的系统监控方案中
- 日志轮转是必要的,防止日志文件过大
选择合适的监控方式取决于你的具体需求:是临时检查还是持续监控,是否需要告警功能等。

抱歉,评论功能暂时关闭!