Mas poucos sabem é que existem vários outros sinais, inclusive alguns livres para serem usados por você em algum propósito especial.
Veja o seguinte código:
#!/bin/bash
while true; do
echo " Hello World again!"
sleep 3
done
Trata-se de um loop infito que mostra uma mensagem a cada 3 segundos.
Podemos utilizar o comando trap para "interceptar" certos sinais enviados para o processo e executar algum comando quando ao receber o sinal.
Vamos então melhorar nosso script:
#!/bin/bash
trap "echo Saindo...; exit" INT
while true; do
echo " Hello World again!"
sleep 3
done
Ao rodar o script, pressione Ctrl-C para interromper o processo. A mensagem "Saindo..." será exibida antes do processo terminar. Isso aconteceu porque tratamos o sinal INT ( Interrupt ).
Outro exemplo interessante é utilizar o sinal USR1, ( User signal 1 ), que é um sinal que voce pode utilizar para qualquer coisa em seu script. Veja:
#!/bin/bash
trap "echo Saindo...; exit" INT
trap "echo Mensagem assincrona!" USR1
while true; do
echo " Hello World again!"
sleep 3
done
Rode o script e em outro terminal, ache o PID do seu script e envie o sinal USR1 para ele. Troque testetrap.sh pelo nome do arquivo de seu script.
P=`ps a | grep testetrap.sh | grep -v grep | cut -f2 -d\ `; kill -USR1 $P
Veja no outro terminal que a mensagem aparecerá de forma assíncrona. Pra que serve? Em shell script avançado voce pode tomar ações antes que seu script seja fechado ou implementar funções especiais, como fazer algum salvamento parcial.
Para aprender mais sobre sinais, sugiro a leitura do man kill e o site: http://en.wikipedia.org/wiki/Kill_%28command%29
Muito legal essa informação. Procurando por shell script em geral, passei por essa página e com certeza é algo que irá se encaixar perfeitamente no script que estou planejando: um sinal específico em meu script.
ResponderExcluirQue bom, Claudio, se precisar de alguma outra dica pode postar aqui, que eu posso tentar ajudar.
ResponderExcluirValeu!