Cómo matar procesos desde la terminal de Linux

A veces, matar un proceso es la única forma de deshacerse de él. A pesar del nombre severo, «matar» un proceso simplemente significa «obligarlo a abandonar». A continuación, le mostramos cómo hacerlo desde la línea de comandos de Linux o macOS.

¿Qué es un proceso?

La ejecución de programas como su navegador web, los procesos en segundo plano asociados con su entorno de escritorio y los servicios del sistema Linux son todos procesos.

Puede agrupar los procesos en dos grupos:

Los procesos en primer plano son aquellos que un usuario ha iniciado o lanzado. Pueden estar en una ventana de terminal o pueden ser una aplicación gráfica.
Los procesos en segundo plano son todos los procesos que se inician automáticamente y no tienen ninguna interacción con los usuarios. No esperan aportes de los usuarios ni les presentan resultados o resultados. Los procesos en segundo plano son cosas como servicios y demonios.

Si los procesos de primer plano son el frente del personal del teatro y los actores, los procesos de fondo son el equipo detrás del escenario «detrás de escena».

Cuando los procesos se comportan mal o funcionan mal, pueden acaparar demasiado tiempo de CPU, consumir su RAM o entrar en un ciclo computacional estrecho y dejar de responder. Las aplicaciones gráficas pueden negarse a responder a los clics del mouse. Es posible que las aplicaciones de terminal nunca lo devuelvan al símbolo del sistema.

La respuesta humana

«Matar» un proceso simplemente significa «forzar el cierre del proceso». Esto puede ser necesario si el proceso se niega a responder.

Linux proporciona los comandos kill, pkill y killall para permitirle hacer precisamente eso. Estos comandos se pueden utilizar con cualquier tipo de proceso, gráfico o de línea de comandos, en primer plano o en segundo plano.

  Cómo instalar los controladores de gráficos de Nvidia en Manjaro Linux

El comando de matar

Para utilizar kill, debe conocer el ID de proceso (PID) del proceso que desea finalizar. El comando ps se puede utilizar para encontrar el PID de un proceso.

Para que ps busque en todos los procesos, use la opción -e (todos los procesos). Es recomendable canalizar la salida a través de menos, habrá bastante. Escriba ps, un espacio, -e, un espacio, | (un carácter de tubería), otro espacio y luego escriba menos. Presione Enter para ejecutar el comando.

ps -e | less

comando ps en una ventana de terminal

Esto le dará una lista de procesos similar a la siguiente captura de pantalla. Puede buscar hacia adelante en menos usando la tecla / y puede buscar hacia atrás usando? llave.

salida de ps en una ventana menos

Para concentrarse en el proceso que le interesa, canalice la salida de ps a grep y especifique el nombre, o parte del nombre, del proceso.

ps -e | grep shutter

ps comando canalizado a través de grep para encontrar el proceso del obturador

Una vez que haya localizado el PID del proceso que desea terminar, páselo al comando kill como parámetro. Para terminar el proceso del obturador identificado por el comando anterior, use este comando:

kill 2099

comando kill en una ventana de terminal

El comando de matar es un asesino silencioso; no le da ningún comentario si tuvo éxito.

El comando pkill

El comando pkill le permite matar un proceso (o procesos) por su nombre. No es necesario identificar el proceso por PID. Para usar pkill, proporcione un término de búsqueda que pkill usa para verificar la lista de procesos en ejecución. Los procesos de emparejamiento finalizan. Por lo tanto, debe estar seguro de que ha escrito correctamente ese término de búsqueda.

Como red de seguridad, puede usar el comando pgrep antes de usar el comando pkill. El comando pgrep también acepta un término de búsqueda. Enumerará el PID de cada proceso que coincide con el término de búsqueda. Esto es seguro porque pgrep no emitirá ninguna señal de interrupción a los procesos, y si escribe mal el término de búsqueda, no eliminará otro proceso por error. Puede asegurarse de haber pensado correctamente el término de búsqueda antes de pasarlo a pkill. Tanto pkill como pgrep tratan el término de búsqueda de la misma manera. Su trato es tan similar que compartir la misma página de manual.

  Cómo convertir documentos de Google a archivos de Office gratuitos en Linux

Supongamos que hay un proceso con «subq» en su nombre. Usaremos ps -u dave | comando grep para echar un vistazo detrás de la cortina. Puede ver que «subq» coincidirá con ese proceso y solo con ese proceso. Eso fue solo para que puedas ver el nombre completo del proceso.

ps -u dave | grep subq

comando ps en una ventana de terminal

Supongamos que nuestro usuario no ha hecho eso; todo lo que saben es que el nombre del proceso contiene la subcadena «subq». Usan pgrep para verificar que solo haya una coincidencia con el término de búsqueda. Luego usan ese término de búsqueda con pkill.

pgrep subq
pkill subq

pgrep y pkill en una ventana de terminal

Puede usar pkill para matar varios procesos a la vez. Aquí el usuario ejecuta pgrep para comprobar cuántos procesos ha iniciado Chrome. Usan pkill para matarlos a todos. Luego verifican con pgrep que se hayan eliminado todos.

pgrep chrome
pkill chrome
pgrep chrome

pgrep y pkill en una ventana de terminal

Si se están ejecutando varios procesos con el mismo nombre, pero no desea eliminarlos a todos, puede usar pgrep con la opción -f (línea de comando) para identificar qué proceso es cuál. Un ejemplo simple serían dos procesos de ping. Quieres matar a uno de ellos pero no al otro. Puede usar sus líneas de comando para distinguir entre ellos. Tenga en cuenta el uso de comillas para ajustar el parámetro de la línea de comandos.

pgrep -f "ping 192.168.4.22"
pkill -f "ping 192.168.4.22"

pgrep pkill con línea de comando ping

El comando Killall

Advertencia: En los sistemas operativos Solaris y OpenIndiana, el comando killall matará todos los procesos que le pertenecen. Si es root o si ha emitido sudo killall, ¡reiniciará su computadora! Durante la investigación para este artículo, este comportamiento se confirmó con la última versión de OpenIndiana Hipster 2018.10.

  Las 4 mejores herramientas de conversión de audio para Linux

El comando killall opera de manera similar al comando pkill pero con una diferencia específica. En lugar de pasar un término de búsqueda al comando, debe proporcionar el nombre exacto del proceso.

No puede proporcionar una coincidencia parcial con un nombre de proceso; debe proporcionar el nombre completo del proceso, como se muestra:

killall shutt
killall shutter

comando killall en una ventana de terminal

La opción -y (menor que) le permite matar procesos que se han estado ejecutando durante menos de un período especificado. El período se indica en números seguidos de una de estas unidades:

s (segundos)
m (minutos)
h (horas)
d (días)
w (semanas)
M (meses, nota, «M» mayúscula)
y (años)

Para matar un proceso llamado ana que se acaba de iniciar y dejar en ejecución cualquier instancia anterior de ana, puede usar los siguientes parámetros con killall, si reaccionó en dos minutos:

killall -y 2m ana

killall con opción más joven que

La opción -o (anterior a) le permite eliminar procesos que se han estado ejecutando durante más de un período especificado. Este comando eliminará todas las conexiones ssh que se hayan estado ejecutando durante más de un día:

killall -o 1d sshd

comando killall en una ventana de terminal

No seas demasiado feliz

Estos comandos le permitirán identificar y finalizar procesos erróneos con precisión y seguridad correctamente.

Sea siempre cauteloso. Primero, asegúrese de que el proceso que está a punto de finalizar sea realmente el que desea. En segundo lugar, verifique dos veces: tenga cuidado y asegúrese de que el proceso objetivo sea el que desea finalizar. Continúe con la finalización del proceso una vez que esté satisfecho.