Aunque Linux es conocido por ser un sistema mucho más estable y fiable que Windows, como cualquier sistema también puede llegar a fallar. Hay programas, y procesos, que se pueden quedar bloqueados y hacer que, o bien el uso de la memoria o de la CPU del ordenador se dispare mientras intenta recuperar el control del proceso, o directamente que el sistema se bloquee por completo y no podamos interactuar con él. Linux ofrece a los usuarios más experimentados varias formas de solucionar esto. Y hoy vamos a explicar una de las más conocidas: el comando kill.
Kill, como podemos imaginar, es un comando que, al ejecutarlo, estamos mandando «matar» a un proceso. Esto forzará al sistema a deshacerse de él, aunque esté bloqueado, y nos permitirá recuperar el control del sistema sin necesidad de tener que realizar. Se trata de un comando que hay que ejecutar desde un terminal, por lo que lo primero que tenemos que hacer es abrir una ventana de Terminal, o TTY, desde donde podremos ejecutar comandos.
Abrir un TTY y ver los procesos abiertos
Cuando la interfaz gráfica (GUI) se congela y deja de responder, el primer paso es acceder a una consola virtual de texto (TTY). O, en su defecto, podemos conectarnos desde otro ordenador (por ejemplo, un PC con Windows) mediante SSH para tomar el control del sistema y poder ejecutar estos comandos.
Para cambiar a un TTY de Linux, podemos hacerlo con el atajo de teclado «Ctrl + Alt + Fx» (pudiendo cambiar la «Fx» por F3, F4, F5 o F6). Linux nos pedirá nuestro usuario y nuestra contraseña. Tras escribirlos, tendremos ya acceso a una nueva consola del sistema. Para volver al TTY con interfaz gráfica, tenemos que pulsar el atajo de teclado Ctrl + Alt + F7 (o F1 / F2, en los sistemas más nuevos con Wayland).
Una vez que tengamos control dentro de un Terminal, de la forma que sea, lo siguiente será identificar el proceso que está funcionando mal. Para ello, debemos usar un administrador de tareas (nosotros recomendamos htop, ya que es uno de los mejores y más fáciles de usar) ejecutando «htop» en el terminal.
Podemos ordenar todos los procesos por uso de CPU o uso de memoria para encontrar cuál está causando el estrangulamiento del sistema. Una vez que lo tengamos a la vista, debemos fijarnos en el PID, ya que es el código que debemos mandar, junto al comando «Kill», para matar el proceso.
Truco: Si pulsamos F9 dentro de htop, podemos mandar una orden «kill» al proceso que tengamos seleccionado. Pero nosotros os vamos a explicar cómo funciona el comando como tal.
¿Y si el ordenador no tiene htop? No pasa nada. Linux nos ofrece otras muchas formas de conocer el PID de un proceso. Algunas de las más sencillas de usar son:
- Comando ps: Es la opción más robusta. Podemos usar «ps aux | grep firefox» para encontrar el PID de Firefox. El PID es el número que aparece en la segunda columna.
- Comando pidof: Es la más directa. Simplemente tenemos que lanzar «pidof firefox» y nos devolverá directamente el número del PID sin más información.
- Comando top: Similar a htop, es un monitor de procesos en tiempo real que viene por defecto. Lo ejecutamos y buscamos el proceso en la lista.
Cómo funciona el comando KILL en Linux
Este comando puede funcionar de varias formas. Por ejemplo, el comando killall seguido del nombre del proceso nos permitirá matar de un golpe todos los procesos que tengan el mismo nombre. Por ejemplo:
killall firefox
Si añadimos el parámetro -9, podemos forzar el cierre, muy útil cuando está bloqueado del todo el proceso:
killall -9 firefox
¡Atención al usar killall! Este comando es potente pero indiscriminado. Si ejecutamos «killall firefox», este cerrará todas las ventanas y procesos de Firefox, sin distinción. Antes de usarlo, debemos asegurarnos de que no hay trabajos importantes sin guardar en ninguno de ellos.
Si queremos ser más precisos, el comando kill nos permite matar procesos concretos mediante su ID. Por ejemplo, podemos forzar el cierre de un proceso cuyo ID es 1234 con:
kill 1234
O forzar su cierre con:
kill -9 1234
Aviso: Es vital entender la diferencia entre las señales de terminación. Por defecto, kill [PID] envía la señal SIGTERM (15), que es una solicitud «educada» para que el proceso se cierre, permitiéndole guardar datos y limpiar recursos. En cambio, kill -9 [PID] envía SIGKILL (9), una «terminación forzosa» e inmediata que no puede ser ignorada. Por lo tanto, solo debemos usar SIGKILL como último recurso, ya que puede causar una corrupción de datos y dejar el sistema en un estado inestable, e incluso bloqueado.
Además de los dos comandos agresivos que acabamos de ver, también podemos hacer uso de otros mucho más ligeros. Por ejemplo, podemos ejecutar «kill -1 [PID]» para mandar una orden SIGHUP (1) al comando de manera que, en vez de reiniciarse a la fuerza, se le indique a un servicio que recargue su fichero de configuración sin necesidad de reiniciarse. O también usar las órdenes SIGSTOP (19) o SIGCONT (18), que permiten pausar (congelar) un proceso sin terminarlo «kill -19 [PID]» y reanudarlo más tarde «kill -18 [PID]«. Muy útil para liberar recursos temporalmente.
Aunque estas herramientas resuelven bloqueos puntuales, como medida de mantenimiento preventivo, es recomendable programar reinicios periódicos para liberar recursos de memoria no devueltos por las aplicaciones y aplicar actualizaciones críticas del kernel que requieran un nuevo arranque.
Procesos críticos que nunca debes cerrar
En un principio, la mayoría de los procesos que corren en Linux se pueden finalizar sin que eso afecte al propio sistema operativo como tal. Sin embargo, sí que hay una serie de procesos que se consideran»críticos» y que finalizarlos puede causar graves fallos al sistema, pérdida de datos, e incluso hacer que el sistema quede inoperativo. Estos procesos son los siguientes:
- PID 1 (init/systemd): finalizar cualquiera de estos procesos hace que el sistema quede completamente inoperable. El kernel no es capaz de gestionar los procesos sin este proceso fundamental.
- PID 2 (kthreadd): se encarga de gestionar los procesos del kernel. Si lo finalizamos, causa fallos en toda la jerarquía de procesos del sistema.
- Procesos del kernel (entre corchetes en ps): los procesos como [kworker/0:0], [migration], etc., son esenciales para operaciones de hardware y gestión de memoria. Tampoco deben finalizarse nunca.
- systemd-journald: es el responsable del registro de eventos del sistema. Si lo finalizamos, nos quedamos sin poder diagnosticar problemas posteriores.
- gnome-shell, kde-plasma, budgie-wm: los gestores de escritorio; matarlos desconecta la interfaz gráfica completa y solo podríamos controlar el sistema mediante comandos.
- Xorg o Wayland: son los servidores gráficos; su terminación elimina la capacidad de visualizar cualquier interfaz gráfica por pantalla.
- Procesos de red críticos (systemd-resolved, NetworkManager): si los finalizamos, nos quedamos sin Internet.
- Dbus: el sistema de comunicación entre aplicaciones; finalizarlo impide que muchos servicios funcionen correctamente.
- systemd-logind: se encarga de gestionar las sesiones de usuario; su terminación puede cerrar todas las sesiones activas.
