
두 개의 스크립트가 있습니다. 첫 번째는 배경에 있고 두 번째는 전경에 있습니다.
trap "ret=\$?; rm -f pipe1 pipe2; exit \$ret" EXIT INT TERM QUIT
my.bin > pipe1 < pipe2 &
my-term.sh pipe1 pipe2
my-term.sh
stdin/stdout을 통해 사용자와 상호 작용합니다(CLI 터미널 프로그램과 유사).
while read -ep "prompt> " l; do echo $l; done
my.bin
exit 0
시뮬레이션할 스크립트 입니다 .
my-term.sh
my.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