En un sistema operativo, hay muchos programas, que pueden ser ejecutados por un usuario o por el propio sistema operativo (como servicios del sistema). Tales programas que se ejecutan en el sistema se llaman «procesos». Por lo general, un proceso termina por sí solo cuando han terminado con su tarea, o cuando se les pide que lo dejen presionando un atajo de teclado o haciendo clic en el botón «Cerrar».
Sin embargo, a veces un proceso puede colgarse o consumir mucha CPU o RAM. En esta situación, querrá «matar» manualmente el proceso. En este artículo, veremos varias herramientas que puede usar para matar procesos en un sistema Linux.
Localizar el proceso para eliminar
Para eliminar un proceso, primero debe localizar los detalles del proceso. Usted puede hacer esto a través de tres comandos — top
ps
pidof
y pgrep
. Dependiendo de la situación, puede usar uno de estos comandos para este propósito.
Como veremos más adelante en este artículo, puede matar un proceso por su nombre o su ID de proceso (PID). El PID es un número que identifica de forma única un proceso. Matar por el ID de proceso es útil cuando se quiere matar solo un proceso específico. Por otro lado, matar por el nombre del proceso es útil cuando desea matar todas las instancias en ejecución de un programa en particular.
Ubicando el proceso con el comando superior
Primero veremos el comando top
. Inicie el comando superior escribiendo:
top
Obtendrá una interfaz interactiva, como se muestra a continuación. Puede navegar por esta lista para encontrar el nombre o el PID del proceso que desea eliminar.
Para navegar por esta lista, puede usar las teclas arriba/abajo. Además, el comando superior también tiene formas de filtrar los procesos por uso de CPU, nombres de usuario y procesos, que puede consultar en esta guía.
La columna de la izquierda contiene el PID del proceso, y el lado derecho contiene el nombre del programa. Como ejemplo, en la captura de pantalla anterior tenemos el proceso vnstatd
que se ejecuta con un ID de proceso de 263.
Localizar el proceso con comandos ps y grep
Otra forma de obtener una lista de procesos es ejecutando:
ps aux
En el comando anterior, hemos utilizado las banderas aux
que tienen los siguientes significados:
-
a
: Mostrar procesos para todos los usuarios -
u
: Mostrar el usuario que está utilizando el proceso -
x
: Mostrar todos los procesos. (Sin esto,ps
no mostrará los procesos que se ejecutan en un entorno GUI.)
La salida del comando es similar a la de top
. El PID está disponible en la segunda columna de la izquierda, y el nombre del proceso está disponible en la columna de la derecha.
La ventaja de usar ps
es que fácilmente puede filtrar esta lista con la etiqueta grep
comando. Por ejemplo, para encontrar un proceso asociado con el término «vnstat», puede usar:
ps aux | grep -i vnstat
Aquí, tenemos dos resultados — el vnstatd
proceso, así como el grep
proceso. Dado que estábamos buscando todas las instancias del término «vnstat», y también estábamos ejecutando grep
con «vnstat» como argumento, también obtuvimos grep
en los resultados.
Por lo tanto, incluso cuando no hay procesos relacionados con «vnstat» en ejecución, obtendríamos una entrada que mostrara los procesos de filtrado grep
:
Así que, aunque obtuvimos un resultado, no hay procesos que nos interesen.
Encontrar el PID con pidof y pgrep
El top
y ps
grep
combinación nos permite la búsqueda de procesos. Por otro lado, si conoce el nombre exacto de un proceso, puede usar pidof
para encontrar su PID.
Usar pidof
es bastante sencillo. Para obtener los PIDs de un proceso con el nombre exacto de «nginx», use:
pidof nginx
Si hay procesos con el nombre exacto de «nginx», obtendrá una lista de PIDs, como se muestra a continuación. Si no hay ninguno, no obtendrá nada como la salida.
Si usted no sabe el nombre completo, usted puede usar pgrep
en lugar de pidof
. Por ejemplo, para buscar todos los procesos que contengan «ngin» en algún lugar de su nombre, ejecute:
pgrep ngin
Esto coincidirá con los procesos con el nombre exacto de «nginx», así como con cualquier otro proceso que coincida con los mismos criterios. Para nuestro sistema, observe que obtenemos todos los PIDs que pertenecían a «nginx» en la captura de pantalla anterior.
El pidof
ypkill
comandos de darle mucha menos información. Como veremos en la siguiente sección, hay algunas circunstancias en las que no se puede matar un proceso. La salida de top
y ps
contiene información adicional que le ayuda a determinar si realmente puede matar un proceso.
¿Qué procesos puedes eliminar?
Ahora que hemos localizado el proceso, es hora de matarlo. Sin embargo, antes de aprender a hacerlo, hay algunas cosas que necesita saber.
Si eres un usuario normal, puedes eliminar tus propios procesos, pero no los que pertenecen a otros usuarios. Tanto top
como ps
muestran el usuario bajo el que se está ejecutando un proceso. En el caso de top
, la segunda columna contiene el nombre de usuario. Con ps aux
, la primera columna contiene el nombre de usuario.
Sin embargo, un usuario root puede matar todos los procesos. Puede agregar sudo
antes de cualquier comando para ejecutarlo como root, u obtener un shell root escribiendo su
, y luego ejecutar el comando.
En Linux, cuando se mata un proceso, se entrega una «señal de terminación» al proceso. Aunque hay muchos tipos diferentes de señales, principalmente tratamos con las señales «SIGTERM» y «SIGKILL». Tienen un valor numérico de 15 y 9 respectivamente. De forma predeterminada, todos los comandos de eliminación de procesos usan «SIGTERM», que permite al programa ejecutar código antes de que salga, lo que le permite terminar»con gracia». Si desea terminar el proceso por la fuerza, puede usar «SIGKILL» en su lugar.
El núcleo Linux mantiene cierta información relacionada con el estado de un proceso. Cuando un proceso termina, el núcleo debe mantener la información disponible, para que el proceso padre pueda averiguar si el proceso hijo fue capaz de completar sus tareas y si terminó por sí solo, o si fue asesinado. Hasta que el padre lo haya hecho, estos procesos» zombis » aparecerán en la lista de procesos. No se puede matar un proceso de este tipo porque es solo una entrada en la lista de todos los procesos, y no tiene un proceso real asociado a él.
Cuando un proceso realiza operaciones de entrada / salida (como leer o escribir en discos), se dice que está en un estado de «suspensión ininterrumpida». No se puede matar un proceso mientras está en este estado.
Puede saber si un proceso está en el estado»zombie «(Z) o»sueño ininterrumpido»(D) mirando la octava columna de la salida top
ps
.
el Asesinato de un proceso de
Hay varios comandos que puede utilizar para matar un proceso de — kill
killall
pkill
y top
. Comenzaremos por el más simple: el comando killall
.
Matar procesos con el comando killall
El comandokillall
es una de las formas más fáciles de matar un proceso. Si conoce el nombre exacto de un proceso, y sabe que no se está ejecutando como otro usuario y que no está en los estados Z o D, puede usar este comando directamente; no es necesario localizar manualmente el proceso como describimos anteriormente.
De forma predeterminada, Por ejemplo, para matar un proceso llamado «firefox», ejecute:
killall firefox
Para matar por la fuerza el proceso con SIGKILL, ejecute:
killall -9 firefox
también puede utilizar la etiqueta -SIGKILL
en lugar de -9
.
Si quieres matar a los procesos de forma interactiva, puede usar -i
así:
killall -i firefox
Si quieres matar un proceso que se ejecuta como un usuario diferente, puede usar sudo
:
sudo killall firefox
también puede matar un proceso que ha estado funcionando durante un cierto período de tiempo con el -o
y -y
banderas. Por lo tanto, si desea eliminar un proceso que se ha estado ejecutando durante más de 30 minutos, use:
killall -o 30m <process-name>
Si desea eliminar un proceso que se ha estado ejecutando durante menos de 30 minutos, use:
killall -y 30m <process-name>
De manera similar, use las siguientes abreviaturas para las unidades de tiempo respectivas:
s | seconds |
m | minutes |
h | hours |
d | days |
w | weeks |
M | months |
y | years |
Killing processes with the pkill command
Sometimes, you only know part of a program’s name. Como pgrep
pkill
le permite matar procesos en base a coincidencias parciales. Por ejemplo, si quieres matar a todos los procesos que contiene el nombre apache
en el nombre, ejecute:
pkill apache
Si desea utilizar una señal SIGKILL en lugar de un SIGTERM, uso:
pkill -9 apache
de Nuevo, también puede usar -SIGKILL
en lugar de -9
.
Matar procesos con el comando kill
Usar el comando kill es sencillo. Una vez que haya encontrado el PID del proceso que desea eliminar, puede terminarlo usando el comando kill
. Por ejemplo, si desea eliminar un proceso que tenga un PID de 1234, use el siguiente comando:
kill 1234
Como mencionamos anteriormente, el valor predeterminado es usar un SIGTERM. Para usar un SIGKILL, use -9
o -SIGKILL
como hemos visto antes:
kill -9 1234
Matar procesos con el comando superior
Es muy fácil matar procesos usando el top
comando. Primero, busca el proceso que quieres eliminar y anota el PID. Luego, presione k
mientras se ejecuta top (esto distingue entre mayúsculas y minúsculas). Te pedirá que ingreses el PID del proceso que quieres eliminar.
Después de introducir el PID, pulse intro. Ahora le preguntará qué señal desea usar para matar el proceso. Si desea usar SIGTERM(15), simplemente presione enter, ya que es la señal predeterminada. Si desea usar SIGKILL(9), escriba 9 y presione entrar.
Si deja el ID de proceso en blanco y presiona enter directamente, terminará el proceso más alto de la lista. Puede desplazarse con las teclas de flecha y cambiar el proceso que desea eliminar de esta manera.
Conclusión
En este post, vimos las diversas formas de matar procesos en Linux. Aprender estos comandos es esencial para la administración y gestión adecuadas del sistema. Si desea explorar más de esos comandos, eche un vistazo a sus respectivas páginas de manual.
Si te ha gustado este post, por favor compártelo 🙂