Ruby · Avançado · Inglês · Técnico
trap
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