は、その後、私は関数を実行し、これら3つのプロセスが終了するのいずれかの場合に必要な配管
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 /)? POSIXシェルやBashよりExpectでは、サブプロセスを終了する方がよりエレガントです。 – nwk
@nwk私はbashスクリプトを書いています。だから私はこれが許されることを疑う。 – marmistrz