2016-05-31 82 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

默認情況下,非交互式shell不啓用作業控制。看看 將'set -o monitor'放在腳本的開頭會產生你想要的 結果。

來源:Chet Ramey,GNU bash的維護者

+0

我的shabang是'#!/ bin/bash -m'。所以這不應該是 – marmistrz

+0

我建議測試它。 – Cyrus

+0

結果完全相同。 – marmistrz