在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

此脚本可帮助您在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

如何在后台启动脚本,然后在后台开始睡觉,然后等待任何一个完成。如果睡眠首先结束,请杀死脚本。

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

做以下类似的事情。注意-Cps选项在每个系统上都找不到,因此请执行类似于您的PID和时间类似的操作,尽管我仍然会使用-o(例如,在某些OS X上,我会做诸如ps -axo start,pid,command | awk '$NF == "loop.sh" {print $1 " " $2}'或类似的事情)。另外,除非由于某种原因而不会退出,否则我不会使用kill -9

#!/bin/bash
start=$(date -d $(ps -C loop.sh -o start=) '+%s' 2>/dev/null)
timeup=$(($start + 600 )) #10*60=600
pid=$(ps -C loop.sh -o pid=)
if [[ -z $pid ]]; then
  echo "NOT FOUND!"
elif [[ $(date '+%s') > $timeup ]]; then
  kill -9 "$pid"
fi

通过睡眠命令很容易实现您想要的东西:

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

最新更新