#!/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