Skip to content

Procesos

This content is not available in your language yet.


La gestión de procesos es uno de los pilares fundamentales de cualquier sistema Linux. Todo lo que ocurre en el sistema —desde un simple ls hasta la ejecución de un servidor web como Nginx— se materializa a través de procesos gestionados por el Kernel. Como Sysadmin, entender cómo se crean, monitorizan, priorizan y finalizan estos procesos es crítico para garantizar la estabilidad, rendimiento y disponibilidad de un entorno en producción.

Dominar este ámbito te permitirá diagnosticar cuellos de botella, identificar procesos maliciosos o zombis, optimizar el consumo de recursos y aplicar políticas de control sobre la ejecución de aplicaciones.


Al finalizar este capítulo serás capaz de:

  • Comprender qué es un proceso y cómo lo gestiona el Kernel.
  • Monitorizar procesos en tiempo real y analizar su consumo de recursos.
  • Manipular procesos (detener, pausar, reanudar, finalizar).
  • Gestionar prioridades mediante nice y renice.
  • Identificar procesos problemáticos (zombies, huérfanos, runaway processes).
  • Aplicar técnicas de control en entornos críticos.

Un proceso es una instancia de un programa en ejecución. Cada proceso tiene asociados múltiples atributos:

  • PID (Process ID): Identificador único.
  • PPID: ID del proceso padre.
  • UID/GID: Usuario que lo ejecuta.
  • Estado: running, sleeping, stopped, zombie.
  • Consumo de recursos: CPU, memoria, IO.

El Kernel es responsable de:

  • Planificar su ejecución (scheduler).
  • Asignar recursos.
  • Gestionar su ciclo de vida.

En Linux, los procesos pueden encontrarse en diferentes estados:

  • R (Running): Ejecutándose o listo para ejecutarse.
  • S (Sleeping): Esperando un evento (IO, señal).
  • D (Uninterruptible): Espera bloqueante (normalmente IO).
  • T (Stopped): Pausado manualmente.
  • Z (Zombie): Finalizado pero no recogido por su padre.

Linux estructura los procesos en forma de árbol jerárquico:

  • Todo parte del proceso PID 1 (actualmente systemd).
  • Cada proceso tiene un padre.
  • Al morir el padre, los procesos pasan a depender de systemd.

Visualización:

Ventana de terminal
ps -ef --forest

El Kernel utiliza el Completely Fair Scheduler (CFS) para repartir CPU de forma equitativa.

Factores clave:

  • Nice value (-20 a 19):

    • -20 → máxima prioridad
    • 19 → mínima prioridad
  • Load Average: indica carga del sistema:

    • 1.0 = CPU completamente ocupada (por núcleo)

Las señales son mecanismos para comunicarse con procesos:

  • SIGTERM (15): apagado ordenado.
  • SIGKILL (9): terminación forzada.
  • SIGSTOP / SIGCONT: pausar/reanudar.

Tienes un servidor donde una aplicación está consumiendo demasiada CPU. Necesitas:

  1. Identificar el proceso.
  2. Analizar su comportamiento.
  3. Reducir su impacto.
  4. Terminarlo si es necesario.

Ventana de terminal
ps aux --sort=-%cpu | head
  • ps aux: lista todos los procesos.
  • --sort=-%cpu: ordena por uso de CPU descendente.
  • head: muestra los primeros.
USER PID %CPU %MEM COMMAND
root 1234 95.0 5.2 python app.py

Ventana de terminal
top

O mejor:

Ventana de terminal
htop
  • P: ordenar por CPU.
  • M: ordenar por memoria.
  • k: matar proceso.

Ventana de terminal
ps -p 1234 -o pid,ppid,user,%cpu,%mem,cmd

Ventana de terminal
sudo renice 10 -p 1234
  • Aumentamos el valor nice → menos prioridad CPU.

Ventana de terminal
kill 1234
Ventana de terminal
kill -9 1234

Ventana de terminal
pstree -p

  • Causa: Está en estado D (IO bloqueante).
  • Solución:
    • Revisar sistema de almacenamiento.
    • Solo reinicio puede liberar.

  • Verifica:
Ventana de terminal
top
  • Posibles causas:
    • bucle infinito.
    • proceso zombie mal gestionado.
    • malware.

Ejemplo peligroso:

Ventana de terminal
:(){ :|:& };:

-Solución:*

Ventana de terminal
ulimit -u 100

Limita procesos por usuario.


Ventana de terminal
ps aux | grep Z

-Solución:*

  • Reiniciar proceso padre.
  • O reiniciar sistema.

  • Usa herramientas como:

    • htop
    • atop
    • glances

Ventana de terminal
ulimit -n 4096

Controla:

  • archivos abiertos.
  • procesos.
  • memoria.

  • Usa cgroups o systemd slices.

Ejemplo simple:

Ventana de terminal
ps aux --sort=-%cpu | head -n 5

Integrable en scripts de monitorización.



  • Integra servicios en systemd en vez de lanzarlos manualmente.

  • Identifica procesos sospechosos:
Ventana de terminal
ps aux | grep -v root

Has aprendido cómo Linux gestiona los procesos, cómo monitorizarlos, manipularlos y diagnosticar problemas en entornos reales. Este conocimiento es crítico para mantener la estabilidad de sistemas en producción y reaccionar ante incidentes de rendimiento.

En el siguiente capítulo profundizaremos en el corazón del sistema moderno de Linux:

5.2 Deep Dive en systemd: entenderás cómo se orquestan servicios, dependencias y arranque del sistema en entornos empresariales.