Introducción
Si un proceso en Linux se vuelve irresponsivo o está consumiendo demasiados recursos, es posible que necesites finalizarlo.
La mayoría de los procesos tienen sus propios métodos de apagado. Desafortunadamente, los procesos pueden funcionar incorrectamente y no permitir que se les detenga. Si un proceso en segundo plano en ejecución no responde, se vuelve necesario usar un comando para finalizarlo.
Aquí tienes una guía completa sobre cómo finalizar un proceso en Linux utilizando la línea de comandos.
¿Qué procesos puedes terminar en Linux?
Antes de finalizar o terminar un proceso, debes considerar los permisos.
Un usuario root puede finalizar todos los procesos. Puedes agregar sudo antes de un comando para ejecutarlo como root, o obtener una shell de root con su. Luego, ejecuta el comando.
Finalizar un proceso envía un mensaje de terminación al proceso indicado. Hay múltiples tipos de mensajes de terminación, incluyendo:
- SIGKILL: SIGKILL es la forma definitiva de finalizar un proceso. Siempre terminará un proceso y lo finalizará abruptamente, generando un error fatal. SIGKILL siempre debería funcionar. Si no funciona, el sistema operativo ha fallado.
- SIGTERM: SIGTERM intenta finalizar un proceso, pero a diferencia de SIGKILL, puede ser bloqueado o manejado de otra manera. Se puede considerar una forma más suave de intentar terminar un proceso.
Para la mayoría de los propósitos, SIGKILL será el método más rápido y efectivo para finalizar el proceso.
Paso 1: Ver los procesos en ejecución en Linux
El comando top es la forma más sencilla de obtener una visión completa de los procesos que se están ejecutando actualmente.
Para ver una lista de todos los procesos en ejecución, utiliza el comando:
top
El comando top mostrará los IDs de los procesos y los usuarios, además de la cantidad de memoria y potencia de CPU que cada proceso está utilizando.
Para finalizar procesos directamente desde la interfaz de top, presiona k e ingresa el ID del proceso.
Para salir de la interfaz de top, presiona q.
Paso 2: Localiza el proceso a finalizar
Antes de poder finalizar un proceso, necesitas encontrarlo. Hay varias formas en las que puedes buscar un proceso en Linux. Los procesos pueden encontrarse por nombre de proceso (o parte del nombre) o por ID de proceso (también conocido como “pid”).
Localizar un proceso con el comando ps
El comando ps muestra información similar a top, aunque no estará en forma de interfaz. En su lugar, el comando ps proporciona una lista completa de los procesos en ejecución, formateada en función de las etiquetas que agregues.
ps <opciones>
Las opciones más comunes que se pueden agregar son “-aux”:
- -a: Ver procesos de todos los usuarios en lugar del usuario actual.
- -u: Proporcionar información detallada sobre cada uno de los procesos.
- -x: Incluir procesos controlados no por usuarios sino por demonios.
Por ejemplo, el comando ps -aux devolverá una lista detallada de todos los procesos.
Encontrar el PID con pgrep o pidof
El comando Linux pgrep es una forma más compleja de encontrar un proceso. Este comando devolverá procesos en función de un criterio de selección específico, conocido como patrón. El patrón es una expresión regular, como a*, donde * sería un comodín.
pgrep <opciones> <patrón>
Aquí tienes las opciones que se pueden utilizar con este comando:
- -l: Enumerar tanto los nombres de los procesos como los PIDs.
- -n: Devolver el proceso más nuevo.
- -o: Devolver el proceso más antiguo.
- -u: Encontrar solo los procesos que pertenecen a un usuario específico.
- -x: Encontrar solo los procesos que coinciden exactamente con el patrón dado.
El comando pgrep -u root muestra todos los procesos propiedad de root. El comando pgrep -u root ‘a*’ devuelve los procesos propiedad de root que comienzan con la letra “a”.
El comando pidof se utiliza para encontrar el ID de un proceso, siempre que conozcas el nombre del proceso.
pidof <opciones> <programa>
Se pueden incluir algunas opciones, como:
- -c: Devolver solo los PIDs dentro de un solo directorio raíz.
- -o: Omitir ciertos PIDs (incluye los procesos a omitir después de la bandera).
- -s: Devolver solo un PID.
- -x: También devuelve los PIDs de las shells que están ejecutando scripts.
Paso 3: Utiliza opciones del comando kill para finalizar un proceso
Existen varios métodos diferentes para finalizar un proceso en Linux, según si conoces el nombre del proceso en ejecución, el PID del proceso o simplemente cuánto tiempo ha estado ejecutándose el proceso.
Comando killall
El comando killall se utiliza para finalizar procesos por nombre. De forma predeterminada, enviará una señal SIGTERM. El comando killall puede finalizar varios procesos con un solo comando.
killall <proceso>
Se pueden utilizar varias opciones con el comando killall:
- -e: Encontrar una coincidencia exacta para el nombre del proceso.
- -I: Ignorar mayúsculas y minúsculas al intentar encontrar el nombre del proceso.
- -i: Solicitar confirmación adicional al finalizar el proceso.
- -u: Finalizar solo los procesos propiedad de un usuario específico.
- -v: Informar si el proceso se ha finalizado correctamente.
Además de finalizar procesos basados en el nombre, el comando killall también se puede utilizar para finalizar según la antigüedad del proceso, utilizando los siguientes comandos:
- -o: Utiliza esta opción con una duración para finalizar todos los procesos que llevan ejecutándose más tiempo que esa cantidad de tiempo.
- -y: Utiliza esta opción con una duración para finalizar todos los procesos que llevan ejecutándose menos tiempo que esa cantidad de tiempo.
El comando killall -o 15m finalizará todos los procesos que tengan más de 15 minutos, mientras que el comando killall -y 15m finalizará todos los procesos que tengan menos de 15 minutos.
Comando pkill
El comando pkill es similar al comando pgrep, en el sentido de que finalizará un proceso basado en el nombre del proceso, además de otros factores de calificación. De forma predeterminada, pkill enviará la señal SIGTERM.
pkill <opciones> <patrón>
Las opciones de pkill incluyen:
- -n: Finalizar solo el proceso más nuevo de los que se descubren.
- -o: Finalizar solo el proceso más antiguo de los que se descubren.
- -u: Finalizar solo los procesos que pertenecen al usuario seleccionado.
- -x: Finalizar solo los procesos que coinciden exactamente con el patrón.
- -signal: Enviar una señal específica al proceso, en lugar de SIGTERM.
Comando kill
Si conoces el ID de un proceso, puedes finalizarlo con el comando:
kill <ID de proceso>
El comando kill finalizará un solo proceso a la vez con el ID de proceso dado. Enviará una señal SIGTERM indicando al proceso que se detenga. Esperará a que el programa ejecute su rutina de apagado.
El comando -signal se puede utilizar para especificar una señal que no sea SIGTERM.
Comando kill -9 Linux
kill -9 es un comando útil cuando necesitas apagar un servicio que no responde. Se ejecuta de manera similar a un comando kill regular:
kill -9 <ID de proceso>
O
kill -SIGKILL <ID de proceso>
El comando kill -9 envía una señal SIGKILL indicando a un servicio que se apague de inmediato. Un programa irresponsivo ignorará un comando kill, pero se apagará cuando se emita un comando kill -9. Usa este comando con precaución. Omite la rutina de apagado estándar, por lo que se perderán los datos no guardados.
Tu sistema operativo no está funcionando correctamente si una señal SIGKILL no apaga un servicio.
Comando top
El comando top proporciona una interfaz a través de la cual un usuario puede navegar por los procesos que se están ejecutando actualmente.
top
Para finalizar un proceso específico, ingresa k desde la interfaz de top y luego ingresa el ID del proceso deseado.
Comando xkill
El comando xkill es un tipo especial de comando que cierra la conexión de un servidor dado con los clientes.
xkill <recurso>
Si un servidor ha abierto varios procesos no deseados, xkill abortará estos procesos.
Si se ejecuta xkill sin especificar un recurso, se abrirá una interfaz que permite al usuario seleccionar una ventana para cerrar.
Aspectos clave sobre la terminación de un proceso en Linux
- Cuando un proceso no se puede cerrar de ninguna otra manera, se puede finalizar manualmente a través de la línea de comandos.
- Para finalizar un proceso en Linux, primero debes encontrar el proceso. Puedes usar los comandos top, ps, pidof o pgrep.
- Una vez que hayas encontrado el proceso que deseas finalizar, puedes finalizarlo con los comandos killall, pkill, kill, xkill o top.
- Cuando finalices un proceso, puedes enviar una señal de terminación de SIGHUP, SIGKILL o SIGTERM.
- Necesitas tener permisos para finalizar un proceso, los cuales puedes obtener mediante el uso del comando sudo.
Nota: Aprende cómo usar el comando nohup para bloquear la señal SIGHUP y permitir que los procesos se completen incluso después de cerrar la sesión del terminal/shell.
Conclusión
En este artículo, hemos cubierto varias formas de finalizar procesos en Linux. Es fundamental aprender y comprender estos comandos de terminación de Linux para la administración y gestión del sistema.