Bash函数正在等待其子进程完成
问题描述:
获得bash函数输出而不等待其子进程结束的最佳方式是什么?例如,以下内容不起作用,因为在sleep 10&
子进程结束之后,bash才会返回。Bash函数正在等待其子进程完成
test-fn() {
sleep 10&
echo $!
}
pid=$(test-fn)
echo "waiting"
wait $pid
移动测试Fn功能内部回声是不是一种选择:在我的现实生活中的情况下,子永远不会结束,因此函数永远不会返回。
答
问题在于进程替换正在等待与函数调用的stdout关联的管道的所有写入结束都关闭,但睡眠打开了一端。如此接近:
test_fn() {
sleep 10 >&- & # close stdout for sleep, or redirect if desired
echo $!
}
pid=$(test_fn)
echo "waiting"
wait
请注意,*shell无法在$ pid上等待,因为pid不是该shell的子级。
您可能有兴趣使用start-stop-daemon。 – 2015-03-25 13:00:25