Cómo matar procesos desde la terminal de Linux

Contenidos

Terminal Linux estilizado con temática de Ubuntu

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

¿Qué es un procedimiento?

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:

  • Procesos de primer plano son aquellos que han sido iniciados o iniciados por un usuario. Pueden estar en una ventana de terminal o pueden ser una aplicación gráfica.
  • Procesos en segundo plano son todos los procesos que se inician automáticamente y no disponen 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 factible que las aplicaciones de terminal nunca lo devuelvan al símbolo del sistema.

La solución humana

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

Linux proporciona kill, pkill, y killall comandos para permitirle hacer exactamente eso. Estos comandos se pueden usar con cualquier tipo de procedimiento, gráfico o de línea de comando, en primer plano o en segundo plano.

El comando de matar

Utilizar kill, debe conocer el ID de procedimiento (PID) del procedimiento que desea finalizar. los ps El comando se puede usar para hallar el PID de un procedimiento.

Tener ps buscar a través de todos los procesos utilice el -e (todos los procesos) opción. Canalizando la salida a través less es aconsejable, habrá bastante. Escribe ps, un espacio, -e, un espacio, | (un carácter de tubería), otro espacio y después escriba less. Presione Enter para ejecutar el comando.

ps -e | less

Esto le dará una lista de procesos equivalente a la próxima captura de pantalla. Puedes buscar hacia adelante en less usando el / y puede buscar hacia atrás con la ? llave.

salida de ps en una ventana menos

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

ps -e | grep shutter

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

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

kill 2099

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

El comando pkill

los pkill El comando le posibilita matar un procedimiento (o procesos) por su nombre. No es necesario identificar el procedimiento por PID. Utilizar pkill proporcionas una definición de búsqueda que pkill utiliza para comparar con la lista de procesos en ejecución. Los procesos de emparejamiento finalizan. Por eso, debe estar seguro de que ha escrito correctamente ese término de búsqueda.

Como red de seguridad, puede usar pgrep mando antes de usas el pkill mando. los pgrep El comando además acepta una definición de búsqueda. Enumerará el PID de cada procedimiento que coincide con el término de búsqueda. Esto es seguro debido a que 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 procedimiento por error. Puede asegurarse de haber pensado correctamente el término de búsqueda antes de pasarlo a pkill. Ambos pkill y pgrep tratar el término de búsqueda de la misma manera. Su trato es tan equivalente que compartir la misma página de manual.

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

ps -u dave | grep subq

Asumamos nuestro usuario no tiene hecho eso; todo lo que conocen es que el nombre del procedimiento contiene la subcadena «subq». Ellos usan pgrep para chequear que solo hay una coincidencia con el término de búsqueda. Posteriormente usan ese término de búsqueda con pkill.

pgrep subq
pkill subq

Puedes utilizar pkill para matar varios procesos al mismo tiempo. Aquí el usuario corre pgrep para chequear cuántos procesos ha lanzado Chrome. Ellos usan pkill para matarlos a todos. Posteriormente verifican con pgrep que todos han sido eliminados.

pgrep chrome
pkill chrome
pgrep chrome

Si se están ejecutando varios procesos con el mismo nombre, pero no desea eliminarlos a todos, puede utilizar pgrep con el -f (línea de comando) opción para identificar qué procedimiento es cuál. Un ejemplo simple serían dos ping Procesos. Pretendes matar a uno de ellos pero no al otro. Puede utilizar 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 la línea de comando ping

El comando Killall

Advertencia: En los sistemas operativos Solaris y OpenIndiana, el killall el comando será mata todos los procesos que te pertenecen. Si es root o si ha emitido sudo killall reiniciará su computadora! Durante la investigación para este post, esta conducta se confirmó con la última versión de OpenIndiana Hipster 2018.10.

los killall mando opera de manera similar al pkill comando pero con una diferencia específica. En lugar de pasar una definición de búsqueda al comando, debe proporcionar el nombre exacto del procedimiento.

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

killall shutt
killall shutter

los -y (menor que) le posibilita quitar procesos que se han estado ejecutando durante menos que 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 procedimiento llamado ana que se acaba de lanzar y deja cualquier instancia anterior de ana en ejecución, puede usar los siguientes parámetros con killall, si hubiera reaccionado en dos minutos:

killall -y 2m ana

killall con opción más joven que

los -o La opción (anterior a) le posibilita quitar procesos que se han estado ejecutando durante más de un período especificado. Este comando matará a todos ssh conexiones que se han estado ejecutando durante más de un día:

killall -o 1d sshd

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 procedimiento que está a punto de finalizar sea verdaderamente el que desea. En segundo lugar, verifique dos veces: tenga cuidado y asegúrese de que el procedimiento objetivo sea el que desea finalizar. Continúe con la finalización del procedimiento una vez que esté satisfecho.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.