美文网首页
用shell写一个检测程序,检测指定的进程如果运行了一个小时,则

用shell写一个检测程序,检测指定的进程如果运行了一个小时,则

作者: whgfu | 来源:发表于2024-05-26 16:06 被阅读0次
#!/bin/bash

# 指定要检测的进程名称
PROCESS_NAME="your_process_name"

# 获取进程PID
PID=$(pgrep -f $PROCESS_NAME)

# 如果没有找到进程,则退出
if [ -z "$PID" ]; then
  echo "进程 $PROCESS_NAME 未运行。"
  exit 1
fi

# 获取进程的启动时间(单位:秒)
START_TIME=$(ps -p $PID -o lstart= | awk '{print $1, $2, $3, $4, $6}')
START_TIMESTAMP=$(date -d "$START_TIME" +%s)

# 获取当前时间(单位:秒)
CURRENT_TIMESTAMP=$(date +%s)

# 计算进程运行的时间(单位:秒)
RUNNING_TIME=$((CURRENT_TIMESTAMP - START_TIMESTAMP))

# 一小时的秒数
ONE_HOUR=$((60 * 60))

# 如果进程运行时间超过一小时,则杀死该进程
if [ $RUNNING_TIME -ge $ONE_HOUR ]; then
  echo "进程 $PROCESS_NAME 已运行超过一小时,正在终止..."
  kill -9 $PID
  if [ $? -eq 0 ]; then
    echo "进程 $PROCESS_NAME 已成功终止。"
  else
    echo "终止进程 $PROCESS_NAME 失败。"
  fi
else
  echo "进程 $PROCESS_NAME 运行时间未超过一小时。"
fi

说明:

pgrep -f $PROCESS_NAME:查找进程名称包含指定字符串的进程的PID。
ps -p $PID -o lstart=:获取进程的启动时间。
awk '{print $1, $2, $3, $4, $6}':格式化启动时间。
date -d "$START_TIME" +%s:将启动时间转换为时间戳(单位:秒)。
date +%s:获取当前时间的时间戳(单位:秒)。
计算运行时间,如果超过一小时(3600秒),则使用kill -9 $PID强制终止进程。

运行脚本:
将脚本保存为check_process.sh,然后使用以下命令运行:

chmod +x check_process.sh
./check_process.sh

定时执行:

如果需要定时检测,可以将该脚本添加到crontab。例如,每5分钟检测一次:

*/5 * * * * /path/to/check_process.sh

相关文章

网友评论

      本文标题:用shell写一个检测程序,检测指定的进程如果运行了一个小时,则

      本文链接:https://www.haomeiwen.com/subject/acwqqjtx.html