我不是脚本专家,我想知道什么是可以接受的方式来运行脚本最多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专家可以解释这种方法的缺点以及应该采取什么措施,那将是很好的。
答案 0 :(得分:2)
看一下这个脚本:http://www.pixelbeat.org/scripts/timeout 由于调度延迟等原因,注意超过一秒的超时在大多数系统上都是非常荒谬的。另请注意,较新的coreutils包含超时命令,其分辨率为1秒。