¿Por qué el número 9 en el comando kill -9 en unix? [cerrado]

101

Entiendo que está fuera de tema, no pude encontrar ningún lugar en línea y estaba pensando que tal vez los gurús de la programación en la comunidad podrían saber esto.
Yo suelo usar

kill -9 pid

para matar el trabajo. Siempre me pregunté el origen del 9. Lo busqué en Internet y dice

"9 Significa una señal de KILL que no es detectable o ignorable. En otras palabras, indicaría al proceso (alguna aplicación en ejecución) que se cierre inmediatamente" (fuente: http://wiki.answers.com/Q/What_does_kill_-9_do_in_unix_in_its_entirety )

Pero, ¿por qué 9? y ¿qué pasa con los otros números? ¿Hay algún significado histórico o debido a la arquitectura de Unix?

Alby
fuente
6
Creo que esta pregunta pertenece mejor a superuser.com
Rafał Rawicki

Respuestas:

89

Consulte el artículo de wikipedia sobre señales Unix para ver la lista de otras señales. SIGKILL acaba de obtener el número 9.

También puede usar los mnemónicos, como los números:

kill -SIGKILL pid
Rafał Rawicki
fuente
6
En el pasado (con lo que me refiero a 4.xBSD más o menos) no podías usar los mnemónicos con el comando de shell, por lo que el número 9 está escrito en una gran cantidad de viejos scripts de shell de cubierta polvorienta.
zwol
72

Hubo otras 8 señales que se les ocurrió primero.

Jonathon Reinhart
fuente
50

Creo que una mejor respuesta aquí es simplemente esta:

mike@sleepycat:~☺  kill -l
 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    

En cuanto a la "importancia" de 9 ... yo diría que probablemente no hay ninguno. De acuerdo con La interfaz de programación de Linux (p. 388) :

Cada señal se define como un número entero único (pequeño), comenzando secuencialmente desde 1. Estos números enteros se definen con nombres simbólicos de la forma SIGxxxx. Dado que los números reales utilizados para cada señal varían entre las implementaciones , son estos nombres simbólicos los que siempre se utilizan en los programas.

mikewilliamson
fuente
32

Primero necesita saber qué son las señales en sistemas similares a Unix (solo le llevará unos minutos).

Las señales son interrupciones de software enviadas a un programa (en ejecución) para indicar que ha ocurrido un evento importante.

Los eventos pueden variar desde solicitudes de usuarios hasta errores de acceso ilegal a la memoria. Algunas señales, como la señal de interrupción, indican que un usuario le ha pedido al programa que haga algo que no está en el flujo de control habitual.

Hay varios tipos de señales que podemos usar; para obtener una lista completa de todas las señales disponibles / posibles, use el comando " $ kill -l ": ingrese la descripción de la imagen aquí

En la salida anterior es claramente visible que cada señal tiene un ' número de señal ' (por ejemplo, 1, 2, 3) y un ' nombre de señal ' (por ejemplo, SIGUP, SIGINT, SIGQUIT) asociado a ella. Para obtener una búsqueda detallada de lo que hacen todas y cada una de las señales, visite este enlace .

Finalmente, llegando a la pregunta "Por qué el número 9 en el comando kill -9 ":

Hay varios métodos para enviar señales a un programa o script. Uno de los métodos comúnmente utilizados para enviar señales es usar el comando kill ; la sintaxis básica es:

$ kill -signal pid

Donde señal es el número o el nombre de la señal, seguido del Id de proceso (pid) al que se enviará la señal.

Por ejemplo, -SIGKILL (o -9 ), la señal mata el proceso inmediatamente.

$ kill -SIGKILL 1001

y

$ kill -9 1001

Ambos comandos son lo mismo, es decir, arriba hemos usado el 'nombre de la señal', y luego hemos usado 'número de la señal'.

Veredicto : Uno tiene la opción abierta de usar el 'nombre de la señal' o el 'número de la señal' con el comando de matar .

Nabeel Ahmed
fuente
19

Es una referencia a "Revoulution 9" de los Beatles. Una colección de clips de sonido encadenados y ruidos encontrados, esta grabación presenta a John Lennon repitiendo una y otra vez "Número 9, Número 9 ..." Además, esta canción atrajo más atención en 1969 cuando se descubrió que cuando se tocaba al revés, John parecía para estar diciendo "Enciéndeme, hombre muerto ..."

Por lo tanto, la novena señal estaba destinada a ser la más letal de las señales de muerte.

Escalera
fuente
17
Realmente no puedo decir si estás sacando esto de tu trasero o si existe la posibilidad de que sea cierto.
Jonathon Reinhart
El final de ese tema es verdaderamente épico, particularmente los dos comentarios antes del mío. También me encontré con ese artículo sobre matar y qué secuencia usar: pthree.org/2012/08/14/apropiado-use-of-kill-9-pid
Gull_Code
Quiero tanto que esto sea cierto ... :)
nafas
La persona que dice "número 9" no es Lennon. Sospecho que hay tanta verdad en el resto de la historia (es decir, ninguna) pero quién sabe :)
Stephen Kennedy
8

Hay una lista muy larga de señales Unix, que puede ver en Wikipedia . De manera algo confusa, en realidad puede usar killpara enviar cualquier señal a un proceso. Por ejemplo, kill -SIGSTOP 12345fuerza al proceso 12345 a pausar su ejecución, mientras kill -SIGCONT 12345le dice que se reanude. Una versión un poco menos críptica de kill -9es kill -SIGKILL.

Lawrence Velázquez
fuente
2
También se llama a la llamada del sistema subyacente que envía señales kill. Probablemente porque el comportamiento predeterminado para la mayoría del conjunto original de señales (números del 1 al 15) era terminar el proceso.
zwol
4

No creo que tenga ningún significado para el número 9. Además, a pesar de la creencia común, killse usa no solo para matar procesos sino también para enviar una señal a un proceso. Si tienes mucha curiosidad puedes leer aquí y aquí .

Ilia Frenkel
fuente
3

por qué matar -9: el número 9 en la lista de señales se ha elegido para ser SIGKILL en referencia a "matar las 9 vidas de un gato".

LaFleche78
fuente
3

SIGKILLutilizar para matar el proceso. SIGKILLno se puede ignorar ni manejar. En Linux, formas de dar SIGKILL.

kill -9 <process_pid> 
kill -SIGKILL <process_pid> 
killall -SIGKILL <process_name>
killall -9 <process_name>
KeyMaker00
fuente
1

Escriba el comando kill -l en su shell

encontrará que en el noveno número [ 9) SIGKILL ], por lo que puede usar kill -9 o kill -SIGKILL

SIGKILL es una señal de muerte segura, no se puede desplazar, ignorar o manipular. Siempre funciona con su comportamiento predeterminado, que es matar el proceso.

Sandeep_black
fuente
1

El -9es el número de señal y especifica que el mensaje de interrupción enviado debe ser del tipo KILL (no detectable, no ignorable).

kill -9 pid

Que es lo mismo que a continuación.

kill -SIGKILL pid

Sin especificar un número de señal, el valor predeterminado es -15, que es TERM (señal de terminación de software). Escribir kill <pid>es lo mismo que kill -15 <pid>.

Harini
fuente
0

Ambos son iguales que kill -sigkill processID, kill -9 processID. Es básicamente por terminación forzada del proceso.

Abhilash TC
fuente
0

hay algunos procesos que no se pueden matar como este "matar% 1". si tenemos que terminar ese proceso, se usa un comando especial para matar ese proceso que es kill -9. por ejemplo, abra vim y deténgase si usa ctrl + z, luego vea trabajos y después de aplicar el proceso de eliminación, este proceso no terminará, por lo que aquí usamos el comando kill -9 para finalizar.

Usman
fuente