Un * x shell脚本:运行脚本最多x毫秒的正确方法是什么?

时间:2010-02-02 04:27:37

标签: bash shell

我不是脚本专家,我想知道什么是可以接受的方式来运行脚本最多x毫秒(如果脚本在超时之前完成,则在x毫秒之前完成)。

我以一种我认为非常黑客的方式使用Bash解决了这个问题,我想知道是否有更好的方法来实现它。

基本上我有一个名为sleep_kill.sh的shell脚本,它将PID作为第一个参数,将超时作为第二个参数,这样做:

sleep $2
kill -9 $1 2> /dev/null 1> /dev/null

因此,如果PID对应于在超时之前完成的脚本,那么什么都不会被杀死(我认为操作系统没有时间重新使用这个PID来进行另一个[不相关的]进程看到它是'在开始重用它们之前循环“遍历所有进程ID。”

无论如何,然后我调用可能“挂起”或超时的脚本:

command_that_may_hang.sh
PID=$!
sleep_kill.sh $PID .3
wait $PID > /dev/null 2>&1

我将等待command_that_may_hang.sh最多300毫秒。然而,如果command_that_may_hang.sh仅执行10毫秒,我将不会被“卡住”300毫秒。

如果一些shell专家可以解释这种方法的缺点以及应该采取什么措施,那将是很好的。

1 个答案:

答案 0 :(得分:2)

看一下这个脚本:http://www.pixelbeat.org/scripts/timeout 由于调度延迟等原因,注意超过一秒的超时在大多数系统上都是非常荒谬的。另请注意,较新的coreutils包含超时命令,其分辨率为1秒。