백그라운드 프로세스가 종료되면 포그라운드 프로세스를 안전하게 종료합니다.

백그라운드 프로세스가 종료되면 포그라운드 프로세스를 안전하게 종료합니다.

두 개의 스크립트가 있습니다. 첫 번째는 배경에 있고 두 번째는 전경에 있습니다.

trap "ret=\$?; rm -f pipe1 pipe2; exit \$ret" EXIT INT TERM QUIT
my.bin > pipe1 < pipe2 &
my-term.sh pipe1 pipe2

my-term.shstdin/stdout을 통해 사용자와 상호 작용합니다(CLI 터미널 프로그램과 유사).

while read -ep "prompt> " l; do echo $l; done

my.binexit 0시뮬레이션할 스크립트 입니다 .

my-term.shmy.bin어떤 이유로든 그만둘 경우 어떻게 종료하나요?

작동하는 것:

trap "ret=\$?; rm -f pipe1 pipe2; exit \$ret" EXIT INT TERM QUIT
(my.bin > pipe1 < pipe2; kill -9 $$) &
my-term.sh pipe1 pipe2

하지만 my-term.sh청소가 중단될 수도 있습니다. 옳은 일은 무엇입니까?

답변1

일련의 신호를 시도하고 하나가 실패하면 3초를 기다린 후(수면 시간은 my-term.sh수행해야 하는 작업에 따라 조정될 수 있음) 다른 신호를 시도하십시오.

(my.bin > pipe1 < pipe2; x=$$ ; \
 for sig in SIGTERM SIGINT SIGQUIT SIGABRT SIGKILL ; \
 do kill -${sig} $x && break ; sleep 3s ; done ; ) &
my-term.sh pipe1 pipe2

관련 정보