¿Hay alguna diferencia entre
kill -9 212121
y
kill 212121
¿Hay alguna diferencia entre
kill -9 212121
y
kill 212121
Respuestas:
La página de manual de Ubuntu para kill
explica el propósito del -9
cambio (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
kill
envía la señal especificada al proceso o grupo de procesos especificado. Si no se especifica ninguna señal,TERM
se envía la señal. LaTERM
señal matará los procesos que no captan esta señal. Para otros procesos, puede ser necesario usar la señalKILL
(9
), ya que esta señal no puede ser capturada.
Por lo tanto, el uso del -9
interruptor 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 KILL
señal.
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 kill
pueden 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. TERM
es 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 SIGTERM
y SIGKILL
es 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).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:
kill
y killall
. cat /etc/passwd | head -n1
, enviará SIGPIPE al cat
proceso después de que se imprima la primera línea, haciendo cat
que 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.
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.
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
kill -9