Não use kill -9
! Este comando destina-se a ser usado apenas em alguns casos extremos específicos.
De acordo com a página man (na minha caixa Solaris):
DESCRIPTION
The kill utility sends a signal to the process or processes
specified by each pid operand.
For each pid operand, the kill utility will perform actions
equivalent to the kill(2) function called with the following
arguments:
1. The value of the pid operand will be used as the pid
argument.
2. The sig argument is the value specified by the -s
option, the -signal_name option, or the -signal_number
option, or, if none of these options is specified, by
SIGTERM.
The signaled process must belong to the current user unless
the user is the super-user.
Quando você não especificar nenhum sinal, kill enviará SIGTERM ( kill -15
) para o seu processo. Existem sinais mais agressivos que você pode enviar que são menos violentos do que SIGKILL ( kill -9
).
Por que evitar matar -9?
SIGKILL é um sinal muito violento. Não pode ser pego pelo processo, o que significa que o processo que o recebe tem que largar tudo instantaneamente e sair. Não leva tempo para liberar recursos bloqueados (como soquetes ou arquivos de rede), nem para informar outros processos de saída. Muitas vezes, ele deixará sua máquina em um estado instável. Fazendo uma analogia, você poderia dizer que matar um processo com SIGKILL é tão ruim quanto desligar a máquina com o botão Power (em oposição ao comando shutdown
).
Por uma questão de fatos, o SIGKILL deve ser evitado tanto quanto possível . Em vez disso, como mencionado no artigo, sugerimos que você tente kill -2
e, se isso não funcionar, kill -1
.
Eu vi pessoas se apressarem em enviar SIGKILL o tempo todo (mesmo em roteiros diários de limpeza!). Eu brigo com meus companheiros de equipe diariamente sobre isso. Por favor, não use kill -9
cegamente.