[Linux] Matar Procesos

No existen sistemas infalibles y de vez en cuando las aplicaciones se quedan congeladas, no responden y por más que pinchemos el botón de cerrar no quiere cerrarse. En estos casos recurrimos a la terminal y podríamos usar xkill, pero puede pasar que notemos el sistema lento y no sepamos de donde viene. Para estas situaciones y conocer mejor lo que se está ejecutando, voy a mostrar de forma (intentaré que sea breve) ver los procesos que más usan la CPU y la memoria.

Ver los procesos en ejecución

Tenemos varias opciones: el administrador del sistema (depende la distribución que uses), top, ps, htop, … y un sin fin de utilidades gráficas y por CLI. Aquí trataré solo con ps y htop.

PS

Con ps se pueden hacer auténticas maravillas, pero vamos a lo que nos interesa. Vamos a listar los procesos de todos los usuarios (-a), la información del proceso (-u) y listar los procesos de todas las terminales y usuarios (-x):

ps aux

Esto nos saca un tochaco que a primera vista no gusta nada, vamos a refinarlo

ps axc -o cmd:18,%cpu --sort=-%cpu | head

Ahora mucho mejor, el comando anterior nos muestra de forma ordenada los procesos que están consumuendo mayor cantidad de CPU. Tip: usa un alias en tu .bashrc para ejecutarlo rapidamente.

HTOP

Otra forma de ver en vivo y en directo el consumo e información de los procesos, es con el comando htop, que por defecto no viene instalado en algunas distribuciones. Solo hemos de ejecutar:

htop

Con F3 buscamos la aplicación que nos interese, con F6 tenemos más opciones de ordenar los procesos, etc.

Matar procesos

Usando el PID del proceso

Una forma de realizar esta acción es a través del PID del proceso, para conocer al susodicho tenemos varias opciones. Por ejemplo para conocer el PID de firefox:

ps -ef | grep firefox

pidof firefox

El segundo es mucho más fácil puesto que nos saca directamente lo que buscamos. Ahora para matarlo usamos kill:

kill -9 PID

El parámetro -9 quiere decir que mata al proceso, puede parecer redundante pero tiene que ver con las señales del sistema.

Usando el nombre del proceso

El comando killall termina con todos los programas que conincidan con el nombre que le pasemos. Por ejemplo para matar firefox:

killall -9 firefox

Tenemos más opciones, una de ellas es poder terminar todos los procesos que está corriendo un usuario en particular:

sudo killall -u usuario

Usando parte del nombre del proceso

Con pkill matamos los proceso especificando el nombre o parte del nombre. Al igual que en los ejemplos anteriores:

pkill -9 firefox

pkill puede enviar la señal al proceso de un usuario. Esto es, que queremos matar firefox para un usuario particular:

pkill -9 -u usuario firefox

Matar un proceso zombi

Existen ocasiones que ejecutamos un programa y al cerrarlo dicho programa no se elimina de la tabla de procesos. No son dañinos pero ocupan espacio en la RAM. Es poco comun tener este tipo de procesos pero se puede dar el caso, de modo que vamos a buscarlos y eliminarlos.

ps aux | grep Z

Este comando nos lista los procesos zombi junto con su PID, por lo que ya solo queda hacer un kill -9 PID.

Algunos comandos interesantes

Expongo a continuación algunos comandos de ps con la salida formateada para ver solo el tanto por ciento de CPU o memoria:

# Listamos los procesos que consumen mas CPU
ps axc -o cmd:18,%cpu --sort=-%cpu | head

# Saber el uso de CPU de un proceso
ps axc -o cmd:18,%cpu | grep <Nombre proceso>

# Listar los procesos que consumen mas Memoria
ps axc -o cmd:18,%mem --sort=-%mem | head

# Saber el uso de Memoria de un proceso
ps axc -o cmd:18,%mem | grep <Nombre proceso>

# Saber el uso de CPU y Memoria de un proceso mostrandolo de forma jerarquica
ps axc -H --forest -o cmd:18,%cpu,%mem | grep containerd