Saltar al contenido principal

8. Gestión de Procesos en Bash

Introducción a los Procesos

  • Descripción: Un proceso es una instancia de un programa en ejecución. Linux es un sistema multitarea, lo que significa que puede ejecutar múltiples procesos simultáneamente.
  • Conceptos clave:
    • PID (Process ID): Identificador único de cada proceso.
    • PPID (Parent Process ID): Identificador del proceso padre.
    • Estados de los procesos: Los procesos pueden estar en diferentes estados. Los estados comunes incluyen:
      • R (Running): El proceso se está ejecutando o está listo para ejecutarse.
      • S (Sleeping): El proceso está inactivo, esperando a que un evento ocurra.
      • D (Uninterruptible Sleep): El proceso está esperando a que se complete una operación de E/S (Entrada/Salida).
      • T (Stopped): El proceso ha sido detenido, usualmente mediante la señal SIGSTOP o porque está siendo depurado.
      • Z (Zombie): El proceso ha terminado, pero su información aún no ha sido recolectada por el proceso padre.
      • X (Dead): El proceso ha terminado y ha sido eliminado del sistema (rara vez se ve).

Comandos Básicos para Gestión de Procesos

  • ps - Mostrar información sobre los procesos en ejecución:

    • ps: Muestra los procesos en la terminal actual.
    • ps -e: Muestra todos los procesos del sistema.
    • ps -f: Muestra una salida completa con más detalles.
    • Ejemplo:
      ps -e
  • top - Monitorizar procesos en tiempo real:

    • top: Muestra una lista dinámica de los procesos que están usando más CPU.
    • Comandos dentro de top:
      • h: Ayuda.
      • k: Matar un proceso.
      • q: Salir de top.
    • Ejemplo:
      top
  • htop - Monitorización de procesos (versión mejorada de top):

    • htop: Proporciona una interfaz más amigable y visual para la monitorización de procesos.
    • Ejemplo:
      htop
  • kill - Enviar señales a los procesos:

    • kill [PID]: Enviar la señal SIGTERM para terminar un proceso.
    • kill -9 [PID]: Enviar la señal SIGKILL para forzar la terminación de un proceso.
    • Ejemplo:
      kill 1234
      kill -9 1234
  • pkill y pgrep - Trabajar con procesos por nombre:

    • pgrep [nombre]: Devuelve los PIDs de los procesos que coinciden con el nombre.
    • pkill [nombre]: Envía señales a los procesos que coinciden con el nombre.
    • Ejemplo:
      pgrep bash
      pkill bash

Prioridad de Procesos

  • Descripción: Cada proceso tiene una prioridad que determina cuánto tiempo de CPU recibe. La prioridad puede ser ajustada.
  • Comandos:
    • nice - Iniciar un proceso con una prioridad específica:

      • nice -n [valor] [comando]: Inicia un proceso con el valor de nice especificado (valor por defecto es 0, rango: -20 a 19, donde -20 es la mayor prioridad y 19 la menor).
      • Ejemplo:
        nice -n 10 sleep 100
    • renice - Cambiar la prioridad de un proceso en ejecución:

      • renice [valor] -p [PID]: Cambia la prioridad de un proceso en ejecución.
      • Ejemplo:
        renice -n 5 -p 1234

Ejecución de Procesos en Segundo Plano

  • Descripción: Es posible ejecutar procesos en segundo plano, permitiendo al usuario seguir usando la terminal.
  • Comandos:
    • & - Ejecutar un proceso en segundo plano:

      • comando &: Ejecuta el comando en segundo plano.
      • Ejemplo:
        sleep 100 &
    • bg y fg - Gestionar procesos en segundo plano:

      • bg [job]: Reanuda un trabajo en segundo plano.
      • fg [job]: Trae un trabajo al primer plano.
      • Ejemplo:
        sleep 100 &
        fg %1
    • jobs - Listar trabajos en segundo plano:

      • jobs: Muestra una lista de trabajos en segundo plano.
      • Ejemplo:
        jobs

Ejercicios de Gestión de Procesos

Ejercicio 1: Comandos Básicos para Gestión de Procesos

1.1 Usa ps para listar todos los procesos del sistema.

1.2 Usa top para monitorizar los procesos en tiempo real. ¿Cuál es el proceso que más CPU está usando?

1.3 Usa htop para monitorizar los procesos en tiempo real. ¿Qué diferencias notas respecto a top?

Ejercicio 2: Enviar Señales a Procesos

2.1 Usa kill para terminar un proceso específico.

2.2 Usa pkill para terminar todos los procesos que coinciden con un nombre específico.

Ejercicio 3: Prioridad de Procesos

3.1 Inicia un proceso con una prioridad específica usando nice.

3.2 Cambia la prioridad de un proceso en ejecución usando renice.

Ejercicio 4: Ejecución de Procesos en Segundo Plano

4.1 Ejecuta un comando en segundo plano usando &.

4.2 Usa bg para reanudar un proceso en segundo plano y fg para traerlo al primer plano.

4.3 Usa jobs para listar todos los trabajos en segundo plano.

Ejercicios con soluciones de Gestión de Procesos

Ejercicio 1: Comandos Básicos para Gestión de Procesos

1.1 Usa ps para listar todos los procesos del sistema.

  • Solución:
    ps -e

1.2 Usa top para monitorizar los procesos en tiempo real. ¿Cuál es el proceso que más CPU está usando?

  • Solución:
    top
    En la parte superior de la interfaz de top, puedes ver el proceso que está usando más CPU en tiempo real. Está listado en la columna %CPU.

1.3 Usa htop para monitorizar los procesos en tiempo real. ¿Qué diferencias notas respecto a top?

  • Solución:
    htop
    htop proporciona una interfaz más amigable y visual, con colores que facilitan la lectura. Además, permite navegar por los procesos con las teclas de flecha y proporciona atajos de teclado más intuitivos.

Ejercicio 2: Enviar Señales a Procesos

2.1 Usa kill para terminar un proceso específico.

  • Solución:
kill [PID]

2.2 Usa pkill para terminar todos los procesos que coinciden con un nombre específico.

  • Solución:
pkill [nombre_del_proceso]

Ejercicio 3: Prioridad de Procesos

3.1 Inicia un proceso con una prioridad específica usando nice.

  • Solución:
nice -n 10 sleep 100

3.2 Cambia la prioridad de un proceso en ejecución usando renice.

  • Solución:
renice -n 5 -p [PID]

Ejercicio 4: Ejecución de Procesos en Segundo Plano

4.1 Ejecuta un comando en segundo plano usando &.

  • Solución:
sleep 100 &

4.2 Usa bg para reanudar un proceso en segundo plano y fg para traerlo al primer plano.

  • Solución:
# Primero, detener el proceso en primer plano (Ctrl + Z)
bg %1
fg %1

4.3 Usa jobs para listar todos los trabajos en segundo plano.

  • Solución:
jobs