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

관련 문제