我不是脚本专家,我想知道什么是最多x毫秒运行脚本的可接受方式(并且如果脚本在超时之前完成,则在x毫秒之前完成)。Un * x shell脚本:最多x毫秒运行脚本的正确方法是什么?
我使用Bash解决了这个问题,我认为这很不方便,我想知道是否有更好的方法来做到这一点。
基本上我有一个shell脚本称为sleep_kill.sh
接受一个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
我会等待最多300毫秒command_that_may_hang.sh
。然而,如果command_that_may_hang.sh
只需要10毫秒执行,我将不会在300毫秒内“卡住”。
如果一些shell专家可以解释这种方法的缺点以及应该做些什么,那将会很棒。
请参阅http://stackoverflow.com/questions/526782/how-do-i-limit-the-running-time-of-a-bash-script – kennytm 2010-02-02 04:32:55
如果您真的决定使用小于1秒钟,你会想考虑使用一个特殊的驱动程序的应用程序。即使你有一个sleepMilli,在shell的级别上进行调度也可能会导致300 ms的延迟。 – gary 2010-02-02 05:28:52