Skip to content
Latchkey

SIGKILL vs SIGTERM: as duas formas de um processo morrer

SIGTERM é "por favor, encerre, você tem um momento para fazer limpeza." SIGKILL é "você está morto agora." Um é capturável; o outro não.

Ambos os sinais terminam um processo, mas diferem em cortesia e finalidade. A distinção explica muito do comportamento do CI - cancelamentos graciosos, OOM kills e processos que travam no encerramento.

SIGTERM (sinal 15)

SIGTERM é o pedido de terminação padrão e educado. Um processo pode instalar um handler para capturá-lo, esvaziar buffers, fechar conexões e sair de forma limpa. É assim que encerramentos bem-comportados funcionam. Um processo que ignora SIGTERM simplesmente continua rodando.

SIGKILL (sinal 9)

SIGKILL não pode ser capturado, bloqueado nem ignorado. O kernel remove o processo imediatamente, sem chance de fazer limpeza. É a ferramenta de último recurso - usada quando um processo precisa morrer agora, inclusive pelo out-of-memory killer.

O padrão de escalonamento

Orquestradores e o timeout normalmente enviam SIGTERM primeiro, esperam um período de graça e então escalam para SIGKILL se o processo não saiu. Então um processo que trava durante o encerramento gracioso é morto à força - por isso um encerramento lento pode transformar uma parada esperada em um kill forçado.

TERM then KILL after grace
timeout --signal=TERM --kill-after=10s 60s ./long-task

Como aparecem no CI

  • SIGTERM → exit 143, geralmente cancelamento, timeout ou preempção.
  • SIGKILL → exit 137, geralmente o OOM killer.
  • Um 143 seguido de um 137 significa que o período de graça expirou.

Principais conclusões

  • SIGTERM (15) é capturável e permite limpeza graciosa.
  • SIGKILL (9) é imediato, não capturável e final.
  • As ferramentas enviam TERM primeiro e escalam para KILL após um período de graça.
  • No CI: TERM → exit 143, KILL → exit 137.

Guias relacionados