Como escrever um script bash que intercepta o SIGTERM e mata o processo e todos os subprocessos imediatamente

1

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.

    
por Gavriel 24.01.2016 / 10:37

0 respostas

Tags