Elimine com segurança o processo de primeiro plano quando o processo de segundo plano terminar

2

Existem dois scripts, o primeiro em segundo plano, o segundo em primeiro plano:

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

my-term.sh interage com o usuário via stdin / stdout (é como um programa de terminal CLI):

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

my.bin pode ser simulado com apenas exit 0 script.

Como terminar my-term.sh se my.bin sair por algum motivo?

O que funciona:

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

Mas, provavelmente, interrompe my-term.sh das limpezas. Como fazer isso corretamente?

    
por Velkan 13.10.2016 / 17:06

1 resposta

0

Tente uma lista de sinais, se um falhar, espere três segundos, (o tempo de espera pode ser ajustado com base no que quer que my-term.sh esteja fazendo), então tente outro:

(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
    
por 13.10.2016 / 20:30