超时函数返回值

超时函数返回值

我在 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)冻结,则脚本不执行任何操作。这就是为什么我需要超时。当超时时我想重新启动服务器。我可以做到这一点,但我不知道如何查看它是否超时......

答案1

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

答案2

根据手册( man timeout):

概要超时 [选项] 数字[后缀] 命令 [ARG]...

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

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

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

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

答案3

返回值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。

相关内容