Saltar al contenido

El comando Kill en Linux para cerrar el software fallado

Administración de proceso en un sistema operativo es un tema vasto, siendo el tema de miles de páginas en la literatura técnica. Además, es un tema que está dirigido a un público muy experto. Además, no se tratará aquí de hacer una presentación sobre él, sino solo de mostrar muy rápidamente, por ejemplo, cómo cerrar un programa que no responde en Linux desde la línea de comandos. Este artículo complementa el excelente artículo sobre métodos para cerrar un programa recalcitrante escrito anteriormente por Steve.
El comando que se expondrá aquí es el comando matar. que puede utilizar con todas las distribuciones de Linux.

matar no siempre tiene su nombre exacto

De hecho, aunque también (y principalmente) se usa para esto como veremos más adelante, el comando kill no solo se usa para cerrar autoritariamente un proceso recalcitrante. Ella puede hacer mucho más.
De hecho, la función básica del comando kill es enviar un mensaje (señal) a un proceso en ejecución. Estas señales pueden ser de diferentes tipos, e incluso podemos crear algunas personalizadas. La variedad de señales básicas existentes es suficiente para mostrar la complejidad del tema, pero podemos mencionar entre ellas la pausa y el fondo de un proceso (señal 19 = SIGSTOP así como su atajo de teclado CTRL-Z).

kill todavía se usa principalmente para cerrar procesos

De lo contrario, es probable que hubiéramos elegido otro nombre de comando …

De una manera educada

Como sabemos ahora, kill envía una señal a un proceso. La señal predeterminada enviada por kill es la señal 15, o SIGTERM. Esto pide que el proceso finalice correctamente, es decir, que se tome el tiempo para finalizar el proceso actual y liberar los recursos utilizados antes de invocar el stop (es un poco más complejo que eso en realidad, porque, entre otras cosas, el proceso padre del proceso a cerrar juega un papel en el procedimiento). Es esta señal la que se envía, por ejemplo, cuando hacemos clic en la pequeña cruz para cerrar la ventana del software, o cuando invocamos el comando kill sin especificar la señal a enviar. Cabe señalar que un proceso puede optar por ignorar esta señal, incluso si no se bloquea.

Automáticamente: Cómo cerrar un programa que no responde en Linux desde la línea de comandos

Hay casos en los que un programa o proceso ya no responde a los comandos de control que le envía el sistema operativo. Se dice comúnmente que está “plantado”. En estos casos, invocaremos la señal 9 (SIGKILL) del comando de matar. Esta vez, no es el proceso en sí el que recibirá la señal (no puede de todos modos porque se ha bloqueado), pero el programador del kernel de Linux la recibirá. Al hacerlo, es él mismo quien se hará cargo de la terminación del programa que no responde, de manera administrativa y autorizada. Los recursos del sistema consumidos por el proceso bloqueado se liberarán sin precauciones (por ejemplo, los datos de la memoria no se consolidarán en el disco duro).

Algunos ejemplos

Ejemplos de muerte, que requieren saber el número de proceso

El comando kill requiere que especifiquemos el PID del proceso a completar (el PID = Identificador de proceso, es el número de proceso que le asigna el programador del kernel). Este PID se puede obtener ingresando el comando PD que enumera los procesos actuales, filtrando (usando el comando grep) por el nombre del programa ejecutado. ps a | grep -v grep | grep thunderbird

El comando ps, con las opciones “aux” que le permite listar los procesos en ejecución. Aquí hemos filtrado el nombre thunderbird con el comando grep. El PID del proceso se muestra en la segunda columna. En nuestro ejemplo, tiene el valor 2337.
Para finalizar correctamente el proceso, ingresaremos el siguiente comando: kill 2337 Sin embargo, si estamos allí, es probable que nuestro programa (aquí thunderbird) ya no esté respondiendo, y que no podamos cerrarlo haciendo clic en la cruz de su ventana. En este caso, ingresaremos el siguiente comando: kill -9 2337

el comando de matar

Enviar la señal SIGKILL (-9) con el comando kill para finalizar con autoridad un proceso que no responde. Este comando envía la señal SIGKILL que le pedirá al programador del kernel de Linux que termine el programa recalcitrante.

Un método para evitar determinar el número de proceso antes de cerrar un programa que no responde en Linux desde la línea de comandos

El comando Mátalos a todos está destinado a enviar una señal como lo hace kill, pero esta vez no apunta a un número de proceso: apunta a todos los procesos que ejecutan un comando dado. Además, tenga en cuenta que al igual que con el comando kill, se le proporcionará un número de señal para enviar. killall thunderbird El comando anterior matará limpiamente todos los procesos que están ejecutando el programa thunderbird. Si el programa recalcita, como con kill podemos enviar la señal SIGKILL ingresando el siguiente comando: killall -9 thunderbird

el comando killall

Enviar la señal SIGKILL (-9) con el comando killall que terminará autoritariamente TODOS los procesos que ejecutan el comando thunderbird. Sin embargo, tenga cuidado, incluso si el comando killall es práctico porque no es necesario determinar el número del proceso que se debe eliminar, puede tener efectos secundarios. En efecto, su uso será a costa del riesgo de terminar abruptamente los procesos que no se bloquearon, ya que killall envía la señal a todos los procesos que ejecutan un programa determinado.
Sin embargo, en nuestro ejemplo con thunderbird, no hay problema, porque thunderbird está diseñado para ser ejecutado por un solo proceso. Este no es siempre el caso, especialmente con los programas de servidor, que pueden configurarse para multiplicar procesos a medida que aumenta la carga.