如果我在 bash 脚本中这样做:
sleep 10 &
sleep_pid=$!
some_command &
wait -n
cmd_pid=$!
if kill -0 $sleep_pid 2> /dev/null; then
# all ok
kill $sleep_pid
else
# some_command hung
...code to log diagnostics and then kill -9 $cmd_pid...
fi
其中 some_command 应该很快但可能会由于罕见的错误而挂起。
在“wait -n”开始之前是否存在可以完成并清理 some_command 的风险,因此只有等待 sleep ?还是一个命令后的“&”保证 shell 在处理下一行输入之前不会对其调用 waitpid()?
它在交互式 shell 中工作。如果你这样做:
sleep 10 &
sleep 0 &
wait -n
然后“wait -n”立即返回,即使您在运行它之前等待几秒钟也是如此。但我不确定非交互式 shell 是否可以信任它?
编辑:澄清诊断需求 + 一些语法。
最佳答案
我相信你可以使用 timeout 命令来做到这一点。
http://man7.org/linux/man-pages/man1/timeout.1.html
timeout 10s command_to_run
可以查看timeout命令的退出状态,了解是否超时。
timeout 2s sleep 10
if [[ $? -gt 0 ]]; then
echo "it timed out"
else
echo "It was successful"
fi
关于bash - 使用 sleep 和 wait -n 在 bash 中实现简单的超时,竞争条件与否?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50975596/