![如何在 shell 中查看某个特定进程是否在 1 小时内运行](https://linux22.com/image/1087251/%E5%A6%82%E4%BD%95%E5%9C%A8%20shell%20%E4%B8%AD%E6%9F%A5%E7%9C%8B%E6%9F%90%E4%B8%AA%E7%89%B9%E5%AE%9A%E8%BF%9B%E7%A8%8B%E6%98%AF%E5%90%A6%E5%9C%A8%201%20%E5%B0%8F%E6%97%B6%E5%86%85%E8%BF%90%E8%A1%8C.png)
我的进程名称是test
。如果我使用
ps -ef | grep test
我看到该进程正在运行。现在我想每 10 分钟检查一次,持续一小时,如果成功运行一小时,则打印成功。最好的方法是什么?
答案1
您可以使用while
循环;这里我使用pgrep
它来检查进程是否正在运行:
#!/bin/bash
counter=0
while :; do
[ "$counter" -eq 6 ] && break
if pgrep <process_name> &>/dev/null; then
echo "Success !!"
(( counter += 1 ))
sleep 10m
else
echo "Process not running..exiting !!"
break
fi
done
替换<process_name>
为您要跟踪的进程的实际名称。
答案2
脚本中的一个简单循环:
#! /bin/bash
start=$SECONDS
while (( SECONDS - start < 3600 ))
do
sleep 10m
pgrep -f test &>- || exit
done
echo success
SECONDS
是 bash 中的特殊变量,包含脚本启动以来的秒数。pgrep test
检查名为 的进程test
。如果找不到,我们将退出脚本。如果没有,我们将sleep
等待 10 分钟。
如果我们没有退出,那么pgrep
就是成功的。所以,echo success
。