Terminar Procesos en Linux

LinuxLinuxBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás cómo terminar procesos en Linux utilizando los comandos kill, killall y pkill. Estos comandos son esenciales para gestionar los procesos en ejecución y se pueden utilizar para detener aplicaciones no respondientes o liberar recursos del sistema.

Al final de este laboratorio, podrás:

  • Utilizar el comando kill para terminar un proceso específico
  • Utilizar el comando killall para terminar múltiples procesos por nombre
  • Utilizar el comando pkill como alternativa a killall

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux(("Linux")) -.-> linux/ProcessManagementandControlGroup(["Process Management and Control"]) linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux/BasicSystemCommandsGroup -.-> linux/sleep("Execution Delaying") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") linux/ProcessManagementandControlGroup -.-> linux/kill("Process Terminating") linux/ProcessManagementandControlGroup -.-> linux/killall("Multi-Process Killing") linux/ProcessManagementandControlGroup -.-> linux/pkill("Pattern-Based Killing") linux/SystemInformationandMonitoringGroup -.-> linux/ps("Process Displaying") linux/UserandGroupManagementGroup -.-> linux/sudo("Privilege Granting") subgraph Lab Skills linux/sleep -.-> lab-44{{"Terminar Procesos en Linux"}} linux/grep -.-> lab-44{{"Terminar Procesos en Linux"}} linux/kill -.-> lab-44{{"Terminar Procesos en Linux"}} linux/killall -.-> lab-44{{"Terminar Procesos en Linux"}} linux/pkill -.-> lab-44{{"Terminar Procesos en Linux"}} linux/ps -.-> lab-44{{"Terminar Procesos en Linux"}} linux/sudo -.-> lab-44{{"Terminar Procesos en Linux"}} end

Comprender los Identificadores de Proceso y las Señales

Antes de comenzar a terminar procesos, es importante entender dos conceptos clave: los Identificadores de Proceso (PIDs, por sus siglas en inglés) y las señales.

  1. Abre una terminal en tu máquina virtual de Ubuntu. Por defecto, deberías estar en el directorio /home/labex/project. Si no estás seguro, siempre puedes verificar tu directorio actual escribiendo pwd y presionando Enter.

  2. Comencemos ejecutando un simple proceso en segundo plano. Ingresa el siguiente comando:

    sleep 1000 &

    Este comando inicia un proceso que se detendrá (dormirá) durante 1000 segundos y lo ejecuta en segundo plano. El & al final le dice a la shell que ejecute el comando en segundo plano, lo que te permite seguir usando la terminal.

  3. Para ver los procesos en ejecución, utiliza el comando ps:

    ps aux | grep sleep

    Este comando muestra todos los procesos en ejecución (ps aux) y luego filtra la salida para mostrar solo las líneas que contengan "sleep" (grep sleep).

    Deberías ver una salida similar a esta:

Terminal mostrando el proceso sleep

El número en la segunda columna es el Identificador de Proceso (PID). Lo usaremos más adelante para terminar el proceso.

  1. Linux utiliza señales para comunicarse con los procesos. Las señales más comunes para terminar procesos son:
    • SIGTERM (15): Termina el proceso de manera elegante. Esta es la señal predeterminada enviada por el comando kill.
    • SIGKILL (9): Mata el proceso de forma forzada. Esto se debe utilizar como último recurso cuando SIGTERM no funciona.

Ahora que entendemos los PIDs y las señales, estamos listos para pasar a utilizar el comando kill.

Utilizando el Comando kill

El comando kill se utiliza para enviar una señal a un proceso específico, identificado por su PID. Por defecto, envía la señal SIGTERM, que le pide al proceso que se termine de manera elegante.

  1. Vamos a terminar el proceso sleep que iniciamos anteriormente. Primero, encuentra su PID utilizando el comando ps:

    ps aux | grep sleep

    Anota el PID del proceso sleep. Será un número en la segunda columna de la salida.

  2. Ahora, utiliza el comando kill para terminar el proceso:

    kill <PID>

    Reemplaza <PID> con el Identificador de Proceso real que anotaste. Por ejemplo, si el PID es 1234, escribirías kill 1234.

  3. Verifica si el proceso sigue en ejecución:

    ps aux | grep sleep

    Ya no deberías ver el proceso sleep en la salida, excepto por el propio comando grep.

Si el proceso sigue en ejecución (lo cual es poco probable para un simple comando sleep, pero posible para aplicaciones más complejas), puedes utilizar una señal más fuerte:

kill -9 <PID>
Terminando un proceso con el comando kill

Esto envía la señal SIGKILL, que termina el proceso de forma forzada. Ten precaución con SIGKILL ya que no permite que el proceso se limpie adecuadamente, lo que podría provocar pérdida de datos u otros problemas en aplicaciones más complejas.

Utilizando el Comando killall

El comando killall te permite terminar procesos por nombre, lo cual puede ser más conveniente que utilizar PIDs, especialmente cuando tienes múltiples instancias del mismo programa en ejecución.

  1. Inicia múltiples procesos sleep:

    sleep 2000 &
    sleep 2000 &
    sleep 2000 &

    Este comando inicia tres procesos sleep separados, cada uno ejecutándose durante 2000 segundos en segundo plano.

  2. Verifica que los procesos estén en ejecución:

    ps aux | grep sleep

    Deberías ver tres procesos sleep listados.

  3. Ahora, utiliza el comando killall para terminar todos los procesos sleep:

    sudo killall sleep

    Usamos sudo aquí porque killall puede necesitar privilegios elevados para terminar procesos iniciados por otros usuarios o procesos del sistema. Puedes ser solicitado a ingresar tu contraseña.

  4. Verifica que los procesos hayan sido terminados:

    ps aux | grep sleep

    Ya no deberías ver ningún proceso sleep en la salida, excepto por el propio comando grep.

Si recibes un error "Operation not permitted" (Operación no permitida), significa que no tienes los permisos necesarios para terminar ciertos procesos. En este caso, utilizar sudo como se muestra arriba debería resolver el problema.

Utilizando el Comando pkill

El comando pkill es otra forma de terminar procesos por nombre, similar a killall. Es especialmente útil cuando quieres terminar procesos basados en coincidencias parciales del nombre.

  1. Inicia algunos procesos sleep más:

    sleep 3000 &
    sleep 3000 &
    sleep 3000 &

    Esto inicia tres procesos sleep más, cada uno ejecutándose durante 3000 segundos en segundo plano.

  2. Utiliza el comando pkill para terminar estos procesos:

    sudo pkill sleep

    Al igual que con killall, usamos sudo para asegurarnos de tener los permisos necesarios para terminar todos los procesos coincidentes.

  3. Verifica que los procesos hayan sido terminados:

    ps aux | grep sleep

    No deberías ver ningún proceso sleep en la salida, excepto por el propio comando grep.

La principal diferencia entre pkill y killall es que pkill puede coincidir con un nombre de proceso parcial. Por ejemplo, pkill fire mataría tanto los procesos firefox como los de firebird. Esto puede ser tanto poderoso como peligroso, así que siempre verifica dos veces tus comandos pkill antes de ejecutarlos.

Practicar con Aplicaciones Reales

Ahora que has aprendido cómo usar kill, killall y pkill, practiquemos con una aplicación real. Usaremos Firefox como ejemplo, debes practicar este paso en el entorno de escritorio.

Ejemplo de terminación del proceso de Firefox
  1. Inicia el navegador web Firefox:

    firefox &

    Este comando lanza Firefox en segundo plano. Deberías ver la ventana de Firefox abrirse en tu escritorio.

  2. Utiliza el comando ps para encontrar el PID de Firefox:

    ps aux | grep firefox

    Anota el PID del proceso principal de Firefox. Por lo general, será el primer proceso de Firefox en la lista.

  3. Utiliza el comando kill para terminar Firefox:

    kill <PID>

    Reemplaza <PID> con el Identificador de Proceso real de Firefox que anotaste.

  4. Si Firefox no se cierra (lo cual es posible ya que algunas aplicaciones capturan la señal SIGTERM), intenta usar la señal SIGKILL:

    kill -9 <PID>

    Recuerda, SIGKILL debe usarse como último recurso ya que no permite que la aplicación guarde su estado o se limpie adecuadamente.

  5. Alternativamente, puedes usar killall o pkill:

    sudo killall firefox

    o

    sudo pkill firefox

    Estos comandos terminarán todos los procesos de Firefox a la vez, lo cual puede ser más conveniente que matar los procesos uno por uno.

Recuerda, terminar forzosamente aplicaciones puede provocar pérdida de datos, así que siempre es mejor cerrar las aplicaciones normalmente cuando sea posible. Estos comandos deben usarse cuando una aplicación no responde o cuando necesitas liberar rápidamente recursos del sistema.

Resumen

¡Felicidades! Has completado con éxito este laboratorio sobre la terminación de procesos en Linux. Has aprendido cómo:

  1. Utilizar el comando kill para terminar un proceso específico por su PID
  2. Utilizar el comando killall para terminar múltiples procesos por nombre
  3. Utilizar el comando pkill como alternativa a killall
  4. Aplicar estos comandos tanto a procesos simples en segundo plano como a aplicaciones reales

Recuerda, aunque estos comandos son herramientas poderosas para la gestión de procesos, utilízalos con precaución. Terminar procesos críticos del sistema puede causar inestabilidad en el sistema. Siempre verifica el proceso que estás terminando antes de utilizar estos comandos.

A medida que continúes tu viaje en Linux, encontrarás que estas habilidades de gestión de procesos son invaluable para mantener un sistema que funcione sin problemas y solucionar problemas. ¡Sigue practicando estos comandos para sentirte más cómodo con la gestión de procesos en Linux!