我跑在我的劇本了多個後臺進程退出時,子進程的一個退出
run_gui()
{
exec ... # the real commands here
}
功能run_ai1(), run_ai2
類似於一個bash腳本。
然後我運行的功能,並做必要的管道
run_gui &
run_ai1 &
run_ai2 &
while true; do
while true; do
read -u $ai1_outfd line || echo "Nothing read"
if [[ $line ]]; then
: # processing
fi
done
sleep $turndelay
while true; do
read -u $ai2_outfd line || echo "nothing read"
if [[ $line ]]; then
: # processing
fi
done
sleep $turndelay
done
如果任何這三個進程退出的,我要檢查他們的退出代碼和終止過程的其餘部分。例如,如果run_ai2
以退出代碼3退出,那麼我想要停止進程run_ai1
和run_gui
並退出帶有退出代碼1的主腳本。不同背景進程的正確退出代碼可能有所不同。
問題是:我如何檢測它?有命令wait
,但我事先不知道哪個腳本會先完成。我可以運行wait
作爲後臺進程 - 但它變得更加笨拙。
你能幫助我嗎?
陷阱SIGCHLD,它允許在執行一些孩子最終聲明 –
您可以用[期待](HTTP://期待.sourceforge.net /)?在Expect中,捕獲退出子進程比POSIX shell或Bash更優雅。 – nwk
@nwk我期望寫一個bash腳本。所以我懷疑這將被允許。 – marmistrz