ExpertiDict

Ruby · Avançado · Inglês · Técnico

trap

/tɹæp/método

Método Signal.trap (também Kernel#trap) que registra um bloco para rodar quando o processo recebe um sinal do sistema, como INT ou TERM. Permite encerrar com elegância.

Onde usar

Aparece em workers e daemons que precisam terminar o trabalho atual e fechar conexões ao receber TERM, por exemplo durante um deploy.

Em código

parar = false
trap("TERM") { parar = true }
trap("INT") { parar = true }
until parar
  sleep 0.5
end
puts "encerrando com calma"

Exemplos

Trap TERM and finish the current job first.

Capture o TERM e termine o job atual primeiro.

Keep the trap handler tiny and just set a flag.

Deixe o handler do trap minúsculo e só ligue uma flag.

Cuidado

Dentro do handler faça pouco: Mutex#lock, por exemplo, lança ThreadError em contexto de trap. Use uma flag ou uma fila.

Sinônimos

Signal.trap

Veja também

Todos os termos de Ruby