¿Cuál es el propósito de la opción -9 en el comando kill?

Respuestas:

28

La página de manual de Ubuntu para killexplica el propósito del -9cambio (es cierto que de una manera bastante entrecortada):

Name     Num   Action    Description
KILL       9   exit      cannot be blocked

Esto es lo que dice otra página de manual .

El comando killenvía la señal especificada al proceso o grupo de procesos especificado. Si no se especifica ninguna señal, TERMse envía la señal. La TERMseñal matará los procesos que no captan esta señal. Para otros procesos, puede ser necesario usar la señal KILL( 9), ya que esta señal no puede ser capturada.


Por lo tanto, el uso del -9interruptor garantiza que el proceso se elimine efectivamente. Aunque un proceso congelado o que no responde puede no responder a una TERM señal simple , morirá cuando se envíe una KILLseñal.

SirCharlo
fuente
40

El comando kill enviará una señal definida a un proceso con una identidad dada (PID):

kill -<signal> <pid>

Por supuesto, solo podemos matar los procesos que poseemos, mientras que root puede matar todos los procesos. Ver Wikipedia para un buen resumen de las señales de computación.

Las señales que se killpueden enviar se enumeran en la página de manual . La señal se puede representar por nombre o por número. Si no se da ninguna señal, la señal predeterminada 15 resp. TERMes usado

Los tres comandos a continuación son, por lo tanto, idénticos:

kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234

La diferencia entre SIGTERMy SIGKILLes la forma en que una aplicación puede actuar sobre la señal:

  • TERM: una aplicación podrá finalizar, es decir, ejecutar correctamente una rutina de apagado.
  • KILL: las aplicaciones se detienen y se eliminan de inmediato (lo que podría conducir a la pérdida de datos o aumentar el número de informes para informar un presunto bloqueo en algunos casos).
Takkat
fuente
16

Tenga en cuenta que todos los siguientes son sinónimos:

kill -9 1234
kill -KILL 1234
kill -SIGKILL 1234

Vale la pena señalar que en el mundo del manejo de señales, SIGKILL es uno de los pocos que maneja el sistema operativo, no el programa. Cuando ejecuta kill -9, no le está diciendo a la aplicación que finalice, sino que le está diciendo al sistema operativo que deje de ejecutar el programa, sin importar lo que esté haciendo.

Después de enviar SIGKILL , el programa se detendrá inmediatamente. Si se están ejecutando llamadas al kernel (por ejemplo, Archivo IO) en nombre del programa, esas llamadas pueden continuar o no hasta que finalicen, dependiendo de la llamada, pero el programa en sí no se ejecutará más. Tenga en cuenta que las tareas rastreadas o las tareas que se ejecutan bajo un depurador pueden comportarse de manera diferente aquí.

La otra señal que no se puede bloquear es SIGSTOP, que tiene un efecto similar, pero en cambio congela el programa; puede enviar SIGCONT más tarde para reanudarlo. Este comportamiento está completamente controlado por el sistema operativo y el programa no recibe ninguna notificación previa.

Todas las otras señales se envían al programa; puede manejarlos como quiera, o si ignora la señal, se sigue un comportamiento predeterminado.

Aquí hay algunas señales útiles que puede estar enviando a un proceso:

  • SIGHUP - hangup
    Le dice al programa que el usuario ha desconectado (por ejemplo sesión SSH o ventana de terminal estaba cerrada).
    Por lo general, hace un apagado elegante del programa.
  • SIGINT - interrupción
    Enviado cuando golpeas CTRL+ C
    Por lo general significa "detener lo que estás haciendo" - puede o no matar el programa
  • SIGTERM - terminar
    El valor predeterminado enviado por killy killall.
    Por lo general, finaliza el programa ... a veces después de que el programa termina lo que sea que esté haciendo.
  • SIGSTOP : detener el
    envío cuando presiona CTRL+ Z
    Pausa el programa, discutido anteriormente
  • SIGPIPE - tubería cerrada
    Le dice al programa que la tubería se ha cerrado. Usualmente termina el programa.
    Por ejemplo cat /etc/passwd | head -n1, enviará SIGPIPE al catproceso después de que se imprima la primera línea, haciendo catque finalice antes de terminar todo el archivo.

Si bien todas estas señales suceden "naturalmente" en su propio entorno, puede utilizar la señal para simular una condición para lograr el resultado deseado.

Por ejemplo, si desea finalizar la sesión SSH de alguien, simplemente puede eliminar el proceso, pero al hacerlo evitará que actualice su archivo HISTORY, lo que puede ser importante por razones de seguridad. Pero en cambio, si lo envía SIGHUP , el proceso asumirá que la conexión se ha interrumpido y realizará su limpieza estándar.

tylerl
fuente
Ctrl + \ envía SIGQUIT, donde la acción predeterminada es volcar el núcleo y terminar. Esto se puede usar si un programa está haciendo algo muy incorrecto, debe detenerlo de inmediato y desea poder depurarlo más tarde.
Simon Richter
@SimonRichter Oh, tienes razón. fijo.
tylerl
6

kill -9 Significado: El proceso será eliminado por el kernel; Esta señal no puede ser ignorada. 9 significa señal de KILL que no es capturable o ignorable

Usos: SIGKILL Singal

Significado de matar : el comando de matar sin ninguna señal pasa la señal 15, que finaliza el proceso de la manera normal.

Usos: señal SIGTERM , que puede ser manejada por programadores

devav2
fuente