CodeGym /Cursos /Docker SELF /Finalización de procesos: comandos `kill`, `killall`, `pk...

Finalización de procesos: comandos `kill`, `killall`, `pkill`

Docker SELF
Nivel 2 , Lección 5
Disponible

Finalización de procesos: comandos kill, killall, pkill

1. Finalización de procesos

Hoy daremos un paso más allá y aprenderemos comandos que permiten finalizar procesos de manera eficiente. ¡Prepárate, porque la paciencia hacia los programas "colgados" pronto llegará a su fin!

Cada aplicación o comando en ejecución en Linux es un proceso. ¿Pero qué hacer si un programa se cuelga, consume el 100% de los recursos de la CPU o simplemente deja de funcionar correctamente? La tarea del administrador (o desarrollador) es intervenir y terminar el proceso "rebelde". En Linux, para esto se usa todo un arsenal de herramientas: kill, killall y pkill. No te preocupes, a pesar de los nombres intimidantes, no estamos aquí para romper todo. Más bien, es una forma elegante de poner todo en orden.


2. Comando kill

Conceptos básicos

El comando kill finaliza un proceso utilizando su identificador (PID). El PID es un número único que el sistema asigna a cada proceso. Por ejemplo, si quieres finalizar un proceso con PID 1234, usa el siguiente comando:

kill 1234

Linux, por naturaleza, es bastante democrático, así que el comando kill no le da al proceso una orden de "morir", sino una solicitud de finalización. Esta solicitud se llama "señal". Por defecto, kill envía la señal SIGTERM (15).

¿Qué es una señal?

Linux usa señales para comunicarse con los procesos. Es como enviar postales con diferentes intenciones:

  • SIGTERM (15): "Por favor, finaliza". Es una solicitud amable al proceso para que termine de ejecutarse.
  • SIGKILL (9): "¡Ya basta, estás despedido!" Finalización forzada del proceso.
  • SIGHUP (1): "Oye, recarga la configuración". Se usa para reiniciar algunos procesos sin detenerlos.

Ejemplo de finalización forzada de un proceso:

kill -9 1234

Si el proceso se niega a finalizar con SIGTERM, puedes enviar una señal más estricta: SIGKILL.

¿Cómo saber el PID de un proceso?

Para usar el comando kill, necesitas saber el PID del proceso. Aquí vienen al rescate los comandos ya conocidos ps, top o htop. Por ejemplo, la salida del comando ps aux te mostrará todos los procesos en ejecución:

ps aux | grep firefox

Esta consulta encontrará el proceso de Firefox y mostrará su PID.

Proceso terminado, puedes respirar tranquilo. Pero, ¿qué hacer si hay varios procesos "colgados"? Aquí es donde entran en juego los comandos killall y pkill.


3. Comando killall

Comodidad para finalización masiva

El comando killall te permite finalizar todos los procesos con un nombre específico. No necesitas buscar el PID manualmente, todo se hace mucho más fácil. Por ejemplo, si quieres cerrar todas las instancias de Firefox en ejecución:

killall firefox

Al igual que el comando kill, killall envía señales a los procesos. Puedes especificar una señal concreta:

killall -9 firefox

Consejo útil

Ten cuidado con comandos como killall. Si por error especificas un proceso demasiado general, por ejemplo, killall python, podrías finalizar de golpe todas las aplicaciones Python en ejecución, incluidas tareas del servidor o scripts importantes.

¿Qué señales se soportan?

Para todos los comandos kill, killall y pkill, la lista de señales disponibles se puede consultar con el comando:

kill -l

4. Comando pkill

Buscando procesos por nombre (o parte de él)

El comando pkill funciona de manera similar a killall, pero es más flexible. Permite finalizar procesos que coinciden con un patrón específico. Por ejemplo:

pkill fire

El comando finalizará todos los procesos que contengan la palabra "fire" en su nombre. Esto es útil cuando el nombre del proceso es largo o solo conoces una parte de él.

Finalizando procesos de usuarios

Puedes finalizar procesos que pertenecen a usuarios específicos. Por ejemplo:

pkill -u username

Esto finalizará todos los procesos que pertenezcan al usuario username.

Comparación de kill, killall y pkill

Comando Características
kill Finaliza el proceso por PID. Funciona de manera puntual.
killall Finaliza todos los procesos con un nombre especificado. Ideal para cierre masivo.
pkill Finaliza procesos por nombre o patrón. Soporta parámetros adicionales, como el nombre de usuario.

5. Práctica: finalizamos procesos

Vamos a probar todo lo que hemos aprendido en acción. Para empezar, ejecutemos algunos procesos de larga duración:

sleep 300 &
sleep 400 &
sleep 500 &

Estos comandos crearán tres procesos en segundo plano con diferentes tiempos de espera. Ahora puedes trabajar con los comandos kill, killall y pkill.

  1. Ver todos los procesos sleep en ejecución usando el comando ps:
ps aux | grep sleep

Verás el PID de cada proceso.

  1. Finaliza el proceso con PID, por ejemplo, 1234:
kill 1234
  1. Finaliza todos los procesos sleep de una vez:
killall sleep
  1. Ejecuta algunos procesos más de sleep y termínalos con pkill:
pkill sl

6. Errores típicos y detalles importantes

Si intentas finalizar un proceso para el que no tienes permisos (por ejemplo, el proceso de otro usuario), el comando mostrará un error. Para eso necesitas tener privilegios de superusuario (sudo). Por ejemplo:

sudo kill 1234

Otra fuente de confusión puede ser el uso de señales demasiado agresivas como -9. Esto es equivalente a desconectar el ordenador directamente de la corriente: el sistema no tendrá tiempo de liberar recursos o guardar datos. Usa SIGKILL solo en casos extremos.

Ten cuidado con killall y pkill, especialmente si estás gestionando un servidor. Finalizar procesos "a ciegas" puede llevar a la pérdida de datos importantes.


¿Por qué es importante conocer los comandos para finalizar procesos?

Estos comandos tienen un amplio rango de uso, desde matar aplicaciones bloqueadas hasta gestionar procesos en servidores. En entrevistas, el conocimiento de kill y pkill puede ser un indicador importante de tu competencia, especialmente si hablamos de administración de sistemas o trabajo con el backend.

Usa este conocimiento para crear scripts que finalicen automáticamente procesos descontrolados o liberen puertos ocupados. Por ejemplo, antes de iniciar un servidor que ocupe el puerto 8080, puedes usar:

pkill -f "port 8080"

La flexibilidad y potencia de estos comandos los vuelven herramientas indispensables para cualquier especialista en Linux.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION