2015-03-25 65 views
0

获得bash函数输出而不等待其子进程结束的最佳方式是什么?例如,以下内容不起作用,因为在sleep 10&子进程结束之后,bash才会返回。Bash函数正在等待其子进程完成

test-fn() { 
    sleep 10& 
    echo $! 
} 

pid=$(test-fn) 
echo "waiting" 
wait $pid 

移动测试Fn功能内部回声是不是一种选择:在我的现实生活中的情况下,子永远不会结束,因此函数永远不会返回。

+0

您可能有兴趣使用start-stop-daemon。 – 2015-03-25 13:00:25

回答

1

问题在于进程替换正在等待与函数调用的stdout关联的管道的所有写入结束都关闭,但睡眠打开了一端。如此接近:

test_fn() { 
    sleep 10 >&- & # close stdout for sleep, or redirect if desired 
    echo $! 
} 

pid=$(test_fn) 
echo "waiting" 
wait 

请注意,顶级shell无法在$ pid上等待,因为pid不是该shell的子级。