você está aqui: Home  → Arquivo de Mensagens

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.


 

 

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

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script