shell判断进程时间大于现在系统时间一小时则为真。多种方法举例说明
时间: 2024-09-20 08:11:49 浏览: 45
在Shell脚本中,我们可以使用`date`命令和一些条件运算符来判断一个进程运行的时间是否超过一小时。这里有几种常见的方式:
1. **bash** (Bourne Again SHell) 的简单方法:
```sh
#!/bin/bash
pid_to_check=34149 # 替换为你要检查的实际进程ID
start_time=$(ps -p $pid_to_check -o lstart | awk '{print $1}' | sed 's/\(..\)T\(.\+\):\(..\+\)/\1:\2:/') # 获取进程启动时间,格式化为"HH:MM"
current_time=$(date "+%H:%M") # 当前时间
if [ $(($current_time + 60*60)) -gt "$start_time" ]; then # 超过一小时
echo "进程运行时间已超过一小时"
else
echo "进程运行时间未达一小时"
fi
```
这里假设`ps`命令返回的是类似`Mon Jan 01 00:00:00 2000`这样的格式,`awk`和`sed`用于提取小时和分钟,然后计算差值。
2. **zsh**(Z shell)或其他支持`$(...)`语法的Shell:
```sh
#!/usr/bin/zsh
pid_to_check=34149 # 替换为实际进程ID
start_time=$([[ $(ps -p $pid_to_check -o lstart) =~ ^(\d{2}):(\d{2})$ ]] && echo "${BASH_REMATCH[1]}:${BASH_REMATCH[2]};") # 同样获取并格式化启动时间
current_time=$(( $(date +%H):$(date +%M) ))
if (( $(($current_time + 60*60)) > ${start_time//;/} )); then # zsh中的时间比较
echo "进程运行时间已超过一小时"
else
echo "进程运行时间未达一小时"
fi
```
3. **Python脚本调用shell命令** (如果允许的话):
```sh
#!/bin/bash
pid_to_check=34149
start_time=$(ps -o lstart | cut -d ' ' -f 1)
current_time=$(date +%H:%M)
python -c "import datetime; print(datetime.datetime.now().strftime('%H:%M') > ($start_time + '1:00'))"
```
这会将时间转换成字符串再进行比较,Python脚本内的时间处理更为精确。
阅读全文