De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: André Leon S. Gradvohl
Data de Publicação: 02 de setembro de 2010
Em uma aula de sistemas operacionais (SO), comentou-se a respeito dos sinais que o SO envia aos processos e que, eventualmente, podem causar situações não previstas. Por exemplo, a sequência ctrl-c durante a execução de um processo causa seu encerramento.
Em algumas linguagens, em particular na linguagem C, a captura desses sinais para um eventual processamento pode ser feita com a primitiva signal. No interpretador de comandos BASH, isso também pode ser feito com o comando trap.
A sintaxe do comando trap é a seguinte:
trap [COMANDOS] [SINAIS]
Por exemplo:
trap "echo Buuu" SIGTERM SIGINT
No caso do exemplo anterior, ao pressionar ctrl-c ou se o usuário instanciar o comando kill para "matar" o script, a mensagem "Buuu" aparecerá no terminal do script.
O exemplo a seguir é mais completo:
#!/bin/bash
function trataErro()
{
echo "Voce pressionou ctrl-c"
echo "Mas nao posso terminar agora"
}
trap trataErro SIGINT SIGTERM
for i in {1..10}
do
sleep 1
echo "Dormindo"
done
No exemplo anterior, a função trataErro é chamada se o usuário pressionar ctrl-c durante a execução do script ou usar o comando kill para matar o script. A função trataErro por sua vez, imprime duas mensagens na tela, quando chamada.
Para uma lista de todos os sinais que podem ser tratados pelo comando trap, use o comando kill -l.
Mais informações podem ser encontradas nas man pages.
É isso.
André Leon S. Gradvohl é professor das disciplinas de Sistemas Operacionais e Introdução a Teleprocessamento e Redes na Faculdade de Tecnologia da Unicamp. Seus interesses incluem Processamento de Alto Desempenho e TV interativa.