我们使用带有'&'的异步调用的bash脚本.像这样的东西:
function test() {
sleep 1
}
test &
mypid=$!
# do some stuff for two hours
wait $mypid
Run Code Online (Sandbox Code Playgroud)
通常一切都很好,但有时我们会得到错误
"wait: pid 419090 is not a child of this shell"
Run Code Online (Sandbox Code Playgroud)
我知道bash会将子pid保存在一个特殊的表中,我知道('man wait')如果没有人使用$ !,则bash不允许在此表中存储状态信息,并且没有人可以声明'wait $ mypid'.我怀疑,此优化包含导致错误的错误.有人知道如何打印此表或如何禁用此优化?
写过类似的东西后,我建议正确的策略是在后台分叉功能测试和长时间运行的 2 小时内容。
然后,您可以等待 pid 列表,这些 pid 会在后台调用,并按预期运行时间排序(最快的优先)。
bash(1) 等待还允许您简单地等待所有子进程完成,但这可能需要检查协议是否成功完成。
提高可靠性的另一种方法是使用批处理队列,并启动一个单独的进程来检查是否成功完成。