Que sinal é enviado quando você fecha um terminal bash para os programas em execução

3

Eu tenho um script Bash que lança um programa em Python. O script Bash manipula os sinais SIGINT , SIGTERM e SIGHUP para executar uma operação de limpeza. Percebi que quando eu fecho o processo em uma aba no LXTerminal, o processo de limpeza acontece. Mas quando fecho toda a janela do terminal, o processo de limpeza é fechado.

O que estou perdendo para que o processo de limpeza aconteça?

    
por user3346931 07.10.2015 / 21:38

1 resposta

0

Aqui está um script que gera um script que tentará capturar todos os sinais. O script que ele gera ( sigcatcher.sh ) exibe o nome do sinal capturado antes de sair.

#!/bin/sh

# generate a shell function for each and every available signal.

/bin/kill -l | tr ' ' '\n' |
while read signal; do
    cat <<END_OF_FUNCTION
handle_$signal () {
  echo "Caught $signal"
  exit
}

trap 'handle_$signal' $signal

END_OF_FUNCTION
done >sigcatcher.sh

echo 'echo "$$"; sleep 600' >>sigcatcher.sh

No meu sistema (OpenBSD), /bin/kill -l gera uma lista de sinais disponíveis em uma linha, é por isso que o tr está lá para dividi-lo.

O script gerado será parecido com isto:

handle_HUP () {
  echo "Caught HUP"
  exit
}

trap 'handle_HUP' HUP

handle_INT () {
  echo "Caught INT"
  exit
}

trap 'handle_INT' INT

(etc.)

E será finalizado com

echo "$$"; sleep 600

Produz seu PID e dorme por 10 minutos.

Você o executa assim:

$ sh ./sigcatcher.sh >sigcatcher.out

Então você fecha a janela, e então você inspeciona sigcatcher.out .

Eu não corro o X Windows, mas quando eu mato o painel tmux no qual este script está rodando, eu recebo o "HUP Caught" no arquivo de saída.

    
por 06.01.2017 / 14:57

Tags