如果我在 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 应该很快,但可能会由于罕见的错误而挂起。
那么是否存在 some_command 可以在“wait -n”开始之前完成并清理的风险,因此只有睡眠等待?或者一个命令后的“&”是否保证 shell 在处理下一行输入之前不会对其调用 waitpid() ?
它在交互式 shell 中工作。如果你这样做:
sleep 10 &
sleep 0 &
wait -n
那么即使您在运行之前等待几秒钟,“wait -n”也会立即返回。但我不确定它对于非交互式 shell 是否可信?
EDIT:澄清诊断的需要+一些语法。
我相信您可以使用超时命令来执行此操作。
http://man7.org/linux/man-pages/man1/timeout.1.html http://man7.org/linux/man-pages/man1/timeout.1.html
timeout 10s command_to_run
您可以检查超时命令的退出状态以了解是否超时。
timeout 2s sleep 10
if [[ $? -gt 0 ]]; then
echo "it timed out"
else
echo "It was successful"
fi
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)