超时功能返回值


9

我在debian上使用了超时功能,等待5秒钟等待我的脚本。效果很好,但我遇到的问题是我需要一个返回值。像1表示超时,0表示没有超时,我该怎么做?

看一下我的代码:

timeout 5 /some/local/script/connect_script -x 'status' > output.txt
# here i need the return of timeout

如您所见,我的connect_script -x'status'以字符串形式返回状态并将其打印到屏幕上(可能看不到)。此问题的背景是,如果服务器(用于connect_script)被冻结,则脚本将不执行任何操作。这就是为什么我需要超时的原因。当超时时,我想重新启动服务器。我可以做到,但是我不知道如何查看它是否超时...

Answers:


19

如果timeout超时,则以状态124退出;您可以检查一下以确定脚本是否超时。


是的,谢谢。我在手册中错过了这一点。@Christopher发布对我有用的答案。我不知道美元?句法。因此,您的两个答案都是正确的;)

6

根据手册man timeout):

大纲超时[OPTION] NUMBER [SUFFIX]命令[ARG] ...

[...]如果命令超时,则以状态124退出。否则,以COMMAND状态退出

将其与退出状态或返回值存储在变量中的知识结合起来$?,我们就可以...

timeout 5 /some/local/script/connect_script -x 'status' > output.txt
RETVAL=$?

然后,您可以根据的值进行更多处理$RETVAL,如果超时,则为124,或者根据的退出状态进行其他处理connect_script


1

返回值timeout取决于您用来终止子项的信号。

SIGTERM 返回124:

timeout -s SIGTERM 1 sleep 2; echo $?

SIGKILL返回137:

timeout -s SIGKILL 1 sleep 2; echo $?

参见手册页:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.