Bash Man Page: kill <pid> vs kill -9 <pid>

25

Mi página de manual no documenta la diferencia entre

kill <pid>

y

kill -9 <pid>

Como estos hacen cosas diferentes, ¿por qué el -9 no está documentado en la página de killmanual? Pensé que tal vez eran cosas específicas de la concha, así que también busqué en la página del manual de bash, pero no tuve suerte.

Pregunta extra: ¿qué hace el -9?

Sixtyfootersdude
fuente

Respuestas:

40

killsolo envía una señal al proceso dado. El -9le dice qué señal enviar.

Diferentes números corresponden a diferentes señales comunes. SIGINT, por ejemplo, es 2, por lo que para enviar un proceso, la SIGINTseñal emite el comando

$ kill -2 <pid>

La página de manual aquí especifica:

La señal predeterminada para matar es TERM.

La página de manual también proporciona una tabla de señales que puede enviar. De acuerdo con esta tabla, TERMes 15, estos son todos equivalentes:

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

El aviso 9 es la KILLseñal.

   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
fuente
8
La señal predeterminada ( kill <pid>) es TERM.
heavyd
99
Los números son generalmente, pero no siempre, los mismos en diferentes sistemas basados ​​en Unix. Es mejor usar el nombre de la señal. Es decir, en lugar de kill -9, usa kill -KILL.
mpez0
77
Agregaría que las señales KILLy STOPson las llamadas señales no capturables. Eso significa que cuando TERMse envía una señal a un proceso, puede capturarla y realizar varias operaciones de "apagado" que necesita hacer. La KILLseñal detiene el proceso de inmediato.
Neo
55
Es mejor usar primero la señal predeterminada y solo usar -9 si la predeterminada no funciona. La razón de esto es que no se puede detectar -9, por lo que el programa no tiene la oportunidad de realizar ninguna limpieza. Además, encontrará la documentación para las señales en su sistema enman 7 signal
pausa hasta nuevo aviso.
7

La señal predeterminada es TERM que permite que el programa que se está ejecutando lo atrape y realice una limpieza antes de salir. Un programa también puede ignorarlo si está escrito de esa manera.

Especificar -9 o KILL como señal no permite que el programa lo atrape, limpie o lo ignore. Solo debe usarse como último recurso.

Para ver la lista de números y nombres de señales en Bash, use kill -l(letra ell).

Pausado hasta nuevo aviso.
fuente
4

Estoy usando Ubuntu Linux.

Los comandos de matar básicamente envían una señal al proceso para finalizarlo. Para simplificar las complejas expectativas de comportamiento de la informática cotidiana, el comando kill tiene varias opciones junto con él.

Como se explicó anteriormente con todas las opciones de números de eliminación correspondientes a su definición.

Me gustaría agregarle algunas líneas.

 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 puede ver arriba, estas son todas las opciones de eliminación que obtendrá si ejecuta Ubuntu Linux.

Pero ciertas señales de muerte son comunes en todos los sabores * NIX.

kill -9 es la opción SIGKILL y el núcleo no puede ignorar esta señal, lo que significa que tiene honor esta opción -9 o SIGKILL y sale del proceso de inmediato. Recuerde que este proceso no puede ser manejado por los programas de aplicación.

kill -15, por otro lado, enviará una señal SIGTERM, lo que significa que esperará a que el proceso se cierre limpiamente antes de salir. Esta es la señal predeterminada.

irfan
fuente