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.


Tratando sinais do sistema com o comando trap

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.

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de André Leon S. Gradvohl