我需要运行带有超时功能的命令,这样如果它在x时间内没有执行,那么脚本应该从头开始,否则它可以继续并执行其他命令。我能这样做吗?
我已经尝试过使用案例,但只要我使用一个案例就可以工作,如果使用两个案例就会给我一个错误。有没有人知道怎么做超时?也许使用像-s USR1这样的用户定义信号,但我不知道如何设置它,如果我可以用信号执行命令:/
答案 0 :(得分:0)
如果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
这将通过执行while loop
并超时10秒来启动some_command
,然后测试timeout
的退出代码是否为124。如果是124,那么while循环重复。
:
命令:
是无操作。我们在while
循环体内不需要任何命令,我们使用此命令。
done
这标志着while
循环结束。
这假设some_command负责任地响应TERM信号。如果没有,退出代码将是128 + 9而不是124。
来自man timeout
:
如果命令超时,并且未设置--preserve-status,则 以状态124退出。否则,退出状态为COMMAND。 如果未指定信号,则在超时时发送TERM信号。该 TERM信号会杀死任何不阻止或捕获该进程的进程 信号。由于这个原因,可能需要使用KILL(9)信号 在这种情况下,信号无法被捕获 退出状态是128 + 9而不是124。