如果调用程序 returns 退出代码与超时命令相同,会发生什么情况?

What happens if called program returns the exit code same as timeout command?

我在 Linux shell 中使用 timeout 命令来调用具有特定超时的程序。

并且根据超时命令指南,如果发生超时,它 returns 退出代码 124,如果没有发生超时,returns 程序退出代码。 不幸的是,我调用的程序在某些情况下也 returns 退出代码 124。

所以我只想问一下,我们有没有办法识别124是来自超时命令还是程序?

代码:

timeout 10s program 2>&1 | tee log.txt
if [ "${PIPESTATUS[0]}" == 124 ]; then
    # do something
fi

谢谢

如果你这样做,即

timeout --preserve-status 1 sleep 4

您将获得状态 143,这意味着该命令已被 SIGTERM (128+15==143) 终止。由于命令不应该 return 大于 127 的值来传达状态条件,因此在您的情况下可以使用它来消除超时和“真实”退出状态之间的歧义。

这假设您正在使用 GNU coreutils 附带的 timeout 命令。