【发布时间】:2020-08-24 03:43:24
【问题描述】:
在 stackoverflow 上有很多解决方案 - 如何通过超时关闭脚本或在出现错误时关闭脚本。 但是如何将这两种方法结合在一起呢? 如果在执行脚本期间出现错误 - 关闭脚本。 如果超时 - 关闭脚本。
我有以下代码:
#!/usr/bin/env bash
set -e
finish_time=$1
echo "finish_time=" ${finish_time}
(./execute_something.sh) & pid=$!
sleep ${finish_time}
kill $pid
但是如果在执行过程中出现错误 - 脚本仍然在等待,超时就会结束。
【问题讨论】:
-
所以
wait在孩子身上,有一个超时。如果您等待的时间较短,那么finish_time并且孩子的退出状态为零,然后等到finish_time。如果子状态不为零,则退出并出错。如果您waited 时间过长并且超时,请执行其他操作。 -
如果您使用的是现代 Linux(使用 GNU coreutils),您将有一个
timeout命令为您完成所有这些工作。运行timeout "$finish_time" ./execute_something.sh就可以了。