Terminar un proceso desde la línea de comandos en Linux

Cuando un computador deja de responder, a menudo es porque un proceso está monopolizando los recursos del sistema. Una solución fácil a este problema es terminar el proceso que consume tantos recursos. Pero antes de terminar un proceso, necesitamos entender qué es.

Un proceso es una instancia de un programa en ejecución, junto con todo lo que necesita para dicha ejecución. Al proceso se le asigna una parte de los recursos del sistema para que pueda cargar el contenido del archivo que lee —o los dispositivos de entrada/salida, junto con todo lo demás— en la memoria asignada. Luego utiliza los núcleos de CPU asignados para ejecutarse.

Sin embargo, algunos procesos se comportan de maneras inesperadas. Por ejemplo, un programa puede encontrar un error en su código y empezar a consumir memoria excesiva. Del mismo modo, los procesos pueden consumir el 100% de los núcleos de la CPU. Cuando esto sucede, el equipo deja de responder porque ese proceso no autorizado está ocupando todos los recursos del sistema.

“Terminar” ese proceso libera recursos para que el sistema pueda volver al estado normal. Se requiere un identificador único, que se asigna a cada proceso cuando se inicia, para terminar un proceso. Esto se denomina ID de proceso o PID. Todos los recursos asignados a los procesos se referencian con este número. Encontrar el PID es el primer paso para terminar el proceso y hacer que los recursos del sistema estén disponibles.

En este artículo, te enseñaremos cómo encontrar el PID para un proceso dado y luego terminarlo usando comandos simples.

top: el comando para evaluar el uso y la disponibilidad de los recursos del sistema

top es un comando popular para acceder a la utilización de recursos del sistema. El comando generará una tabla que incluye una lista en tiempo real de todos los procesos en ejecución, cada ID de proceso, el porcentaje de recursos que el proceso está utilizando y más. Puedes ver la interfaz de usuario del comando top en la siguiente figura.

User interface of the top command Fig. 1: interfaz de usuario del comando top

Por defecto, los procesos se ordenan según el porcentaje de CPU que están utilizando en orden descendente. Por eso, el primer proceso que se ve es el que consume más CPU. En este ejemplo, podemos ver que el proceso Webkit está utilizando un poco más del 105% de la CPU. Esto se debe a que, cuando se tomó la captura de pantalla, el navegador web Safari se estaba ejecutando con algunas pestañas reproduciendo videos de varios formatos.

Además de monitorear la columna “%CPU”, también es importante vigilar “MEM”. Esta permite saber cuánta memoria o RAM está siendo utilizada por el proceso.

“%CPU” y “MEM” son dos de las columnas más importantes que debes monitorear en esta tabla.

Terminar un proceso

Ahora que podemos identificar el proceso que está consumiendo más CPU o memoria usando el comando top, veamos cómo podemos terminar dicho proceso.

En primer lugar, podemos obtener el ID del proceso que queremos terminar en la primera columna de la tabla que se muestra en la figura 1. Ten en cuenta que la lista se actualiza continuamente: cada tres segundos para Linux y cada segundo para macOS. En consecuencia, puede ser difícil identificar tanto el proceso como el PID en ese corto período de tiempo. Afortunadamente, hay otro comando para eso.

El comando ps

Una vez identificamos el proceso que queremos terminar, podemos usar el comando ps para obtener el ID de proceso correspondiente. Si ejecutamos el comando ps en nuestro terminal, no vemos mucho en la salida. La siguiente captura de pantalla muestra que el comando ps en sí no da mucha información.

ps command output Fig. 2: salida del comando ps

Al usar las tres opciones siguientes con el comando ps, podemos obtener mucha más información:

  • a: muestra los procesos de todos los usuarios
  • u: enumera los nombres de usuario
  • x: incluye los procesos sin un terminal conectado o de control

Estas tres opciones mostrarán una lista de todos los procesos que se ejecutan en el sistema en un momento dado. Verás algo como la figura de abajo:

The ps aux command output Fig. 3: salida del comando ps aux

En este ejemplo, hemos utilizado la opción adicional "| head" (man7.org/linux/man-pages/man1/head.1.html) para limitar la lista de salida a 10 elementos. Sin embargo, no es necesario. Desde la salida, podemos ver todos los procesos que se enumeran.

Obtener el ID de proceso con el comando ps

Ahora, supongamos que queremos terminar una instancia de Sublime Text que se está ejecutando. Para esto, primero tenemos que obtener el PID de Sublime Text. Usaremos el comando ps aux para hacerlo y filtraremos la lista para mostrar solo las instancias de Sublime Text.

Filtraremos los datos usando otro comando popular llamado grep. Podemos encadenar los comandos usando “pipe”, que está representado por el símbolo |. A continuación se muestra el comando completo:

ps aux | grep subl

subl es el comando utilizado para ejecutar una instancia de Sublime Text. Por lo tanto, cuando ejecutamos este comando, ps mostrará todas las instancias de Sublime Text en ejecución, similar a la captura de pantalla que se muestra en la figura 4.

ps aux | grep subl command output Fig. 4: salida del comando ps aux | grep subl

Como podemos ver en la salida, actualmente hay tres instancias de Sublime Text en ejecución. El primer elemento de la lista es el comando ps en sí mismo, así que lo ignoraremos. La segunda columna es el PID de los procesos.

Ahora finalmente podemos terminar los procesos para liberar recursos del sistema.

El comando kill

Como era de esperar, tenemos otro comando para terminar procesos y es bastante simple: kill. Pasamos el PID del proceso que queremos terminar al comando kill. De la figura 4 anterior, tenemos tres procesos que queremos terminar. Estos tienen los PID 28947, 28946 y 28940. De esta forma, el comando sería:

kill 28947 28946 28940

Podemos pasar varios PID a este sencillo comando kill por lo que no tenemos que terminar cada proceso individualmente. Sin embargo, es importante tener en cuenta que los PID aquí están separados por espacios. Esto terminará las tres instancias en ejecución de Sublime Text, lo cual se puede verificar ejecutando el comando ps aux | grep subl de nuevo.

Varias señales del comando kill

No siempre es motivo de preocupación, pero a veces terminar un proceso sin informar a todos los sistemas posteriores resultará en que más procesos no respondan. Para evitar tales situaciones, Linux proporciona una función llamada “Señales”.

Las señales se utilizan para indicar la ocurrencia de un evento a otros procesos. El comando kill proporciona siete señales, que se muestran en la figura 5.

Common signals available for kill command Fig. 5: señales comunes disponibles para el comando kill

Como se puede ver en la captura de pantalla, estas son las señales más utilizadas. Al terminar un proceso, podemos pasar el identificador numérico de la señal como una opción al comando kill. Pongamos un ejemplo. Si quisiéramos pasar la señal KILL al comando kill, cambiaríamos nuestro comando de la siguiente manera:

kill -9 28947 28946 28940

La salida del comando no es diferente al comando kill sin opciones. La única diferencia es que la señal también es manejada por el sistema. Además de estas opciones comunes, hay otras opciones del comando kill con las que se puede experimentar.

Permisos elevados para terminar procesos

Como habrás observado, no usamos el comando sudo mientras terminamos instancias de Sublime Text. Esto se debe a que Sublime Text fue un proceso de usuario que iniciamos. Sin embargo, habrá casos en los que queramos terminar procesos iniciados por otros usuarios o el sistema.

el proceso de la base de datos no responde. En tales casos, necesitamos permisos elevados para terminar esos procesos. La única diferencia en el comando es agregar “sudo” antes del comando en sí, como se muestra a continuación:

sudo kill -9 28947 28946 28940

Se necesita la contraseña de superusuario para ejecutar el comando, así que asegúrate de tenerla a la mano. A menos que esté en la lista de “sudoers”, no podrás ejecutar el comando y terminar esos procesos sin la contraseña.

Pero debes tener cuidado al terminar procesos como superusuario. Terminar un proceso del sistema puede causar inestabilidad en el sistema, lo que requiere un reinicio que podría causar un tiempo de inactividad. Además, terminar los procesos de otros usuarios puede hacer que sus aplicaciones no funcionen correctamente.

Was this article helpful?
Supervise su entorno Linux

Verifique el estado y la disponibilidad de sus servidores Linux para obtener un rendimiento óptimo con la herramienta de monitoreo de Linux de Site24x7.

Write For Us

Write for Site24x7 is a special writing program that supports writers who create content for Site24x7 "Learn" portal. Get paid for your writing.

Write For Us

Write for Site24x7 is a special writing program that supports writers who create content for Site24x7 “Learn” portal. Get paid for your writing.

Apply Now
Write For Us