Página do Bash Man: kill <pid> vs kill -9 <pid>

25

Minha página de manual não documenta a diferença entre

kill <pid>

e

kill -9 <pid>

Como essas coisas fazem coisas diferentes, por que o -9 não está documentado na página de killmanual? Eu pensei que talvez fosse uma coisa específica do shell, então eu olhei na página de manual do bash também, mas sem sorte.

Pergunta de bônus: o que o -9 faz?

sixtyfootersdude
fonte

Respostas:

40

killapenas envia um sinal para o processo especificado. O -9diz qual sinal enviar.

Números diferentes correspondem a diferentes sinais comuns. SIGINT, por exemplo, é 2, portanto, para enviar um processo, o SIGINTsinal emite o comando

$ kill -2 <pid>

A página de manual aqui especifica:

O sinal padrão para kill é TERM.

A página de manual também fornece uma tabela de sinais que você pode enviar. De acordo com esta tabela, TERMé 15, portanto, todos esses são equivalentes:

kill <pid>
kill -15 <pid>
kill -TERM <pid>

O aviso 9 é o KILLsinal.

   Name   Number  Action
   -----------------------
   ALRM      14   exit
   HUP        1   exit
   INT        2   exit
   KILL       9   exit  this signal may not be blocked
   PIPE      13   exit
   POLL           exit
   PROF           exit
   TERM      15   exit     [Default]
   USR1           exit
   USR2           exit
   VTALRM         exit
   STKFLT         exit  may not be implemented
   PWR            ignore    may exit on some systems
   WINCH          ignore
   CHLD           ignore
   URG            ignore
   TSTP           stop  may interact with the shell
   TTIN           stop  may interact with the shell
   TTOU           stop  may interact with the shell
   STOP           stop  this signal may not be blocked
   CONT           restart   continue if stopped, otherwise ignore
   ABRT       6   core
   FPE        8   core
   ILL        4   core
   QUIT       3   core
   SEGV      11   core
   TRAP       5   core
   SYS            core  may not be implemented
   EMT            core  may not be implemented
   BUS            core  core dump may fail

   XCPU           core  core dump may fail
   XFSZ           core  core dump may fail
Mark Pim
fonte
8
O sinal padrão ( kill <pid>) é TERM.
heavyd
9
Os números são geralmente, mas nem sempre, os mesmos em diferentes sistemas baseados em Unix. É uma prática recomendada usar o nome do sinal. Ou seja, em vez de matar -9, use kill -KILL.
mpez0
7
Eu acrescentaria que os sinais KILLe STOPsão os chamados sinais não capturáveis. Isso significa que quando um TERMsinal é enviado para um processo, ele é capaz de capturá-lo e executar várias operações de "desligamento" que ele precisa executar. O KILLsinal interrompe o processo imediatamente.
Neo
5
É melhor usar o sinal padrão primeiro e usar apenas -9 se o padrão não funcionar. A razão para isso é que -9 não pode ser capturado, portanto o programa não tem chance de fazer nenhuma limpeza. Além disso, você encontra a documentação dos sinais em seu sistema emman 7 signal
Pausada até novo aviso.
7

O sinal padrão é TERM, que permite que o programa que está sendo morto o pegue e faça alguma limpeza antes de sair. Um programa também pode ignorá-lo, se for escrito dessa maneira.

Especificar -9 ou KILL como o sinal não permite que o programa o pegue, faça qualquer limpeza ou ignore. Só deve ser usado como último recurso.

Para ver a lista de números e nomes de sinais no Bash, use kill -l(letra ell).

Pausado até novo aviso.
fonte
4

Estou usando o Ubuntu Linux.

Os comandos Kill basicamente enviam um sinal para processar para finalizá-lo. Para simplificar as expectativas comportamentais complexas do comando kill da computação cotidiana, há várias opções.

Como explicado acima, com todas as opções de números de morte correspondentes à sua definição.

Eu gostaria de adicionar algumas linhas a ele.

 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR
31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX    

Como você vê acima, estas são todas as opções de interrupção que você terá se executar o Ubuntu Linux.

Mas certos sinais de morte são comuns em todos os sabores * NIX.

kill -9 é a opção SIGKILL e o kernel não pode ignorar esse sinal, o que significa que tem a honra dessa opção -9 ou SIGKILL e sai do processo imediatamente. Lembre-se de que este processo não pode ser tratado por programas aplicativos.

kill -15, por outro lado, enviará sinal SIGTERM, o que significa que aguardará o processo ser encerrado corretamente antes da saída. Este é o sinal padrão.

irfan
fonte