Bash Man Página: kill pid vs kill -9 pid

25

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

kill <pid>

e

kill -9 <pid>

Como isso faz coisas diferentes por que o -9 não está documentado no kill manpage? Eu pensei que talvez fosse algo específico do shell, então eu também procurei na página do bash man, mas sem sorte .

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

    
por sixtyfootersdude 11.02.2010 / 14:48

3 respostas

39

kill apenas envia um sinal para o processo em questão. O -9 informa qual sinal enviar.

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

$ kill -2 <pid>

A página de manual aqui especifica:

The default signal for kill is TERM.

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

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

O aviso 9 é o sinal KILL .

   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
    
por 11.02.2010 / 14:54
7

O sinal padrão é TERM, que permite que o programa seja morto para capturá-lo e fazer alguma limpeza antes de sair. Um programa pode ignorá-lo também, se estiver escrito dessa maneira.

Especificar -9 ou KILL como o sinal não permite que o programa capture, faça qualquer limpeza ou ignore-o. Deve ser usado apenas como último recurso.

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

    
por 11.02.2010 / 18:20
4

Estou usando o Ubuntu Linux.

Os comandos Kill basicamente enviam sinal para processar para finalizá-lo. Para simplificar as expectativas comportamentais complexas do comando computacional kill do dia-a-dia, você tem várias opções.

Como explicado acima, com todas as opções de kill numbers 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 kill que você obterá se rodar 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 este sinal, o que significa que ele tem a honra desta opção -9 ou SIGKILL e o processo de saída imediatamente. Lembre-se que este processo não pode ser tratado por programas aplicativos.

kill -15 por outro lado enviará um sinal SIGTERM, o que significa que ele aguardará o processo ser encerrado corretamente antes de sair. Este é o sinal padrão.

    
por 21.06.2012 / 08:48