如何在一段时间内继续运行程序?

时间:2014-09-19 06:32:42

标签: linux bash shell timeout

我想重复运行一个程序最多5秒钟。

我知道timeout执行指定时间的命令,例如:

timeout 5 ./a.out

但是我想继续执行程序,直到5秒钟过去,所以我可以告诉你如何 很多次它被执行了。

我认为我需要这样的东西:

timeout 5 `while true; do ./a.out; done`

但这不起作用。我已经尝试过创建一个计算的shell脚本 每次循环迭代的经过时间并从开始时间中减去它, 但那效率很低。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果你想使用超时:

timeout 5s ./a.out

您可以编写一个简短的脚本,并轻松地设置end time date -d "date string" +%s以获得未来几秒钟的时间。然后,只需将current timeend time进行比较,然后在true上展开。这允许您在执行期间捕获其他数据。例如,以下代码设置将来的结束时间5 seconds,然后循环直到current time等于end

#!/bin/bash

end=$(date -d "+ 5 seconds" +%s)        # set end time with "+ 5 seconds"
declare -i count=0

while [ $(date +%s) -lt $end ]; do      # compare current time to end until true
    ((count++))
    printf "working... %s\n" "$count"   # do stuff
    sleep .5
done

<强>输出:

$ bash timeexec.sh
working... 1
working... 2
working... 3
working... 4
working... 5
working... 6
working... 7
working... 8
working... 9

在你的情况下,你会做类似

的事情
./a.out &                               # start your application in background
apid=$(pidof a.out)                     # save PID of a.out

while [ $(date +%s) -lt $end ]; do
    # do stuff, count, etc.
    sleep .5                            # something to prevent continual looping
done

kill $apid                              # kill process after time test true