Skip to content
Latchkey

O Que É um Signal? Notificações do SO para Processos

Um signal é uma mensagem curta e assíncrona que o sistema operacional envia a um processo para notificá-lo de um evento ou pedir que ele tome uma ação, como parar.

Signals são como o sistema operacional, ou outro processo, dá um toque no ombro de um programa em execução. "Por favor, desligue", "você foi interrompido", "você ficou sem memória". No CI, signals explicam por que um job às vezes para abruptamente: um timeout ou um limite de recursos envia um signal que encerra o processo.

O que é um signal

Um signal é uma notificação assíncrona entregue a um processo. O processo pode tratar alguns signals (executar código de limpeza), ignorar alguns, ou ser forçadamente parado por outros que não consegue capturar.

Signals comuns

  • SIGINT (2): interrupção, o que o Ctrl-C envia.
  • SIGTERM (15): um pedido educado para terminar.
  • SIGKILL (9): uma morte imediata e não capturável.
  • SIGHUP (1): hangup, muitas vezes um shell pai fechando.

Capturável vs não capturável

Um processo pode instalar um handler para SIGTERM para descarregar dados e sair de forma limpa. SIGKILL não pode ser capturado nem ignorado; o kernel para o processo imediatamente, sem chance de limpeza.

Signals e exit codes

Quando um signal encerra um processo, o shell reporta um exit code de 128 mais o número do signal. Então um processo morto por SIGKILL (9) sai com 137, e um parado por Ctrl-C (SIGINT, 2) sai com 130.

Signals no CI

Um job de CI que atinge seu limite de tempo geralmente recebe SIGTERM, depois SIGKILL se não parar. Uma morte por falta de memória também é SIGKILL, e é por isso que o exit code 137 tantas vezes significa "o runner ficou sem memória".

Desligamento gracioso em runners gerenciados

Os runners da Latchkey enviam um signal de terminação antes de desmontar, dando aos passos bem comportados um momento para descarregar logs ou fazer limpeza. Capturar SIGTERM em passos de longa duração permite que eles saiam de forma limpa quando a plataforma pede.

Principais conclusões

  • Um signal é uma mensagem do SO que interrompe um processo para pedir que ele aja.
  • SIGTERM é um pedido educado de parada; SIGKILL não pode ser capturado.
  • Um processo morto por signal sai com 128 mais o número do signal, então SIGKILL dá 137.

Guias relacionados