Bash:如果另一个命令超时,有办法执行一个命令吗



我需要运行一个带有超时功能的命令,这样如果在x时间内没有执行,那么脚本应该从头开始,否则它可以继续执行其他命令。我能做到吗?

我已经尝试过用例,但只要我使用一个,它就可以工作,如果使用两个用例,它就会给我一个错误。有人知道如何暂停吗?也许使用用户定义的信号,比如-s USR1,但我不知道如何设置,也不知道是否可以用信号执行命令:/

如果some_command在10秒内完成,则将继续执行脚本的其余部分。如果some_command超时,则重复,直到它没有超时:

while timeout 10 some_command; [ $? -eq 124 ]
do
:
done
echo "Continuing on with script"

它的工作原理

如果命令超时,则默认情况下,timeout退出并返回代码124。我们可以使用它来测试命令是否超时,从而测试是否需要重复。更详细地说:

  • while timeout 10 some_command; [ $? -eq 124 ]; do

    这通过在10秒超时的情况下执行some_command,然后测试来自timeout的退出代码是否为124来启动while loop。如果是124,则while循环重复。

  • :

    命令:是no-op。在while循环的主体中我们不需要任何命令,我们使用这个命令。

  • done

    这标志着while循环的结束。

特殊情况:行为不端的命令

这假设some_command对TERM信号作出负责任的响应。如果没有,退出代码将是128+9,而不是124。

文件

来自man timeout:

如果命令超时,并且未设置--preserve状态,则以状态124退出。否则,以COMMAND状态退出。如果未指定任何信号,则在超时时发送TERM信号。这个TERM信号杀死任何未阻止或捕获的进程信号可能需要使用KILL(9)信号,因为信号无法捕捉,在这种情况下退出状态是128+9而不是124。

相关内容

  • 没有找到相关文章

最新更新