Eu tenho este script:
#!/bin/bash
set -e
#WHAT SHOULD I WRITE HERE?
sleep 60 # this is for testing
#java ... | logger # this is what will be in the real script
Eu quero ser capaz de matar o myscript e todos os subprocessos enviando um myscript a um SIGTERM:
$ kill -s SIGTERM 5929
Quando eu executo, vejo em ps fuxa
:
me 3640 0.0 0.1 108416 2100 pts/2 Ss 09:38 0:00 \_ /bin/bash
me 5929 0.0 0.0 106060 1348 pts/2 S+ 11:21 0:00 \_ /bin/bash myscript
me 5930 0.0 0.0 100908 604 pts/2 S+ 11:21 0:00 \_ sleep 60
Eu tentei várias linhas de trap de diferentes respostas que encontrei:
#trap 'echo hello' SIGHUP SIGINT SIGTERM EXIT
#trap 'kill $(jobs -p)' SIGHUP SIGINT SIGTERM EXIT
#trap "trap - SIGTERM && kill -- -$$" SIGHUP SIGINT SIGTERM EXIT
Eu usei o primeiro para depuração. O que eu experimento é que eu mando o SIGTERM (ou até mais do que um), e nada acontece. Quando eu pressiono Ctrl+C
, o myscript para, e ele escreve "olá" número de vezes. Então, isso me confirma que a forma como estou enviando o sinal TERM está correta e é recebida, mas ainda assim não consegui meu objetivo: parar o myscript imediatamente. Eu tenho os mesmos resultados com as outras 2 linhas de armadilha.