获取linux bash中运行shell脚本的持续时间

时间:2014-01-21 07:30:52

标签: linux bash shell

我想创建一个shell脚本(kill.sh)来确定当前脚本的经过时间(loop.sh,我之前运行过)。当loop.sh达到10分钟时,kill.sh将终止进程。请帮忙

编辑:

这将是shell脚本loop.sh的内容,它基本上会无限循环。 我想创建一个脚本来确定loop.sh的持续时间并将杀死 如果达到10分钟

#!/bin/bash
while true
do
    echo "Do something; hit [CTRL+C] to stop!"
done

kill.sh可能是这样的

#!/bin/bash
PROC_ID=$(ps -ef | grep "loop.sh" | grep -v grep | cut -c10-15)
...some codes here to get the duration of the loop.sh if it reaches 10 minutes.

if [ "$PROC_ID" != 0 -a (elapsed time is equal or more than 10 minutes) ];
then
    kill -9 "$PROC_ID"
else
    echo "NOT FOUND!"
fi

4 个答案:

答案 0 :(得分:2)

此脚本可帮助您在seconds

中查找已用时间
#!/bin/bash
start=$(date +%s)

#do your work

end=$(date +%s)
elapsed=$(( $end - $start ))
echo "$elapsed sec"

编辑:

#/bin/bash
start=$(date +%s)
elapsed=0
while [ $elapsed -le 600 ] # 60*10=600 seconds 
do
    #do your work
    end=$(date +%s)
    elapsed=$(( $end - $start ))
done
kill -9 "$pid" #pid of the script

答案 1 :(得分:2)

如何在后台启动脚本,然后在后台开始睡眠,并等待任何一个完成。如果睡眠完成,请终止该脚本。

loop.sh & { sleep 600; kill %1 2>/dev/null; }

答案 2 :(得分:1)

执行以下操作。注意-C的{​​{1}}选项在每个系统上都找不到,所以做类似于你正在做的事情以获得pid和时间,尽管我仍然会使用ps(例如,在某些系统上) os x我会做-o或类似的事情。此外,我不会使用ps -axo start,pid,command | awk '$NF == "loop.sh" {print $1 " " $2}',除非出于某种原因不会退出。

kill -9

答案 3 :(得分:0)

您可以通过sleep命令轻松实现所需:

#!/bin/bash
PROC_ID=$(ps -ef | grep "loop.sh" | grep -v grep | cut -c10-15)

sleep 10m

if [ "$PROC_ID" != 0 ];
then
    kill -9 "$PROC_ID"
else
    echo "NOT FOUND!"
fi