2016-05-31 9 views
3

バックグラウンドプロセスが終了したときに検出する必要があります。したがって、私はトラップを設置しました。 run_guirun_ai1は単純なexec関数です。プロセスが終了したときにSIGCHLDが配信されない

run_gui & gui_pid=$! 
run_ai1 & ai1_pid=$! 
trap 'echo foo' SIGCHLD 
while true; do 
    echo "Started the loop" 
    while true; do 
     read -u $ai1_outfd line || echo "Nothing read" 
     if [[ $line ]]; then 
      : # Handle this 
     fi 
    done 
    while true; do 
     read -u $gui_outfd line || echo "nothing read" 
     if [[ $line ]]; then 
      : # Handle this 
     fi 
    done 
done 

GUIを閉じると何も起こりません。 echo fooコマンドは、Ctrl + Cを押した場合にのみ実行されます。

なぜSIGCHLDが見つからないのですか?

+0

これは何も変わりません。 'read'がいくつかの入力を待っていることは重要ですか? – marmistrz

答えて

3

非対話型シェルは、デフォルトでジョブ制御を有効にしません。 スクリプトの冒頭に 'set -o monitor'と入力すると、 の結果が得られるかどうかを確認してください。

出典:Chet Ramey、GNUバッシュのメンテナ

+0

私のshabangは '#!/ bin/bash -m'です。だからこそ、このようなことはありません – marmistrz

+0

私はそれをテストすることをお勧めします。 – Cyrus

+0

結果はまったく同じです。 – marmistrz

関連する問題