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.