linux

怎样编写脚本自动清理僵尸进程

小樊
51
2025-08-05 02:59:50
栏目: 编程语言

要编写一个脚本来自动清理僵尸进程,你可以使用 Bash 脚本结合一些常用的命令行工具,如 pskillwait。以下是一个简单的示例脚本,它会定期检查并终止僵尸进程。

#!/bin/bash

# 定义检查间隔时间(秒)
INTERVAL=60

# 无限循环,每隔 INTERVAL 秒检查一次
while true; do
    # 查找所有僵尸进程
    zombie_processes=$(ps aux | awk '{if ($8 == "Z") print $2}')

    # 如果有僵尸进程,则打印出来并终止它们
    if [ ! -z "$zombie_processes" ]; then
        echo "发现僵尸进程: $zombie_processes"
        kill -9 $zombie_processes
    fi

    # 等待 INTERVAL 秒
    sleep $INTERVAL
done

解释

  1. 定义检查间隔时间INTERVAL=60 表示每隔 60 秒检查一次。
  2. 无限循环while true; do ... done 创建一个无限循环。
  3. 查找僵尸进程ps aux | awk '{if ($8 == "Z") print $2}' 使用 ps aux 查找所有进程,并通过 awk 过滤出状态为 Z(僵尸进程)的进程,打印它们的 PID。
  4. 终止僵尸进程:如果有僵尸进程,使用 kill -9 强制终止它们。
  5. 等待sleep $INTERVAL 让脚本等待指定的时间间隔。

使用方法

  1. 将上述脚本保存为一个文件,例如 cleanup_zombie_processes.sh
  2. 赋予脚本执行权限:chmod +x cleanup_zombie_processes.sh
  3. 运行脚本:./cleanup_zombie_processes.sh

注意事项

改进版本

以下是一个改进版本,增加了日志记录功能:

#!/bin/bash

# 定义检查间隔时间(秒)
INTERVAL=60
# 定义日志文件路径
LOGFILE="/var/log/cleanup_zombie_processes.log"

# 无限循环,每隔 INTERVAL 秒检查一次
while true; do
    # 查找所有僵尸进程
    zombie_processes=$(ps aux | awk '{if ($8 == "Z") print $2}')

    # 如果有僵尸进程,则打印出来并终止它们
    if [ ! -z "$zombie_processes" ]; then
        echo "$(date): 发现僵尸进程: $zombie_processes" >> $LOGFILE
        kill -9 $zombie_processes
        echo "$(date): 终止僵尸进程: $zombie_processes" >> $LOGFILE
    else
        echo "$(date): 没有发现僵尸进程" >> $LOGFILE
    fi

    # 等待 INTERVAL 秒
    sleep $INTERVAL
done

这个版本会在 /var/log/cleanup_zombie_processes.log 文件中记录每次检查的结果。

0
看了该问题的人还看了