DÍA 06: El Supervisor de Procesos

LinuxBeginner
Practicar Ahora

Introducción

¡Bienvenido, Administrador de Sistemas Junior! Es una ajetreada mañana de lunes en "LabEx" y acaba de llegar una alerta crítica: el servidor de aplicaciones principal está sufriendo una ralentización significativa que afecta a todos los usuarios. Los administradores senior están ocupados en una reunión de emergencia y depende de ti investigar y estabilizar el sistema.

Este es tu momento para brillar. Tu misión es sumergirte en la línea de comandos del servidor, diagnosticar el problema inspeccionando los procesos en ejecución, neutralizar a cualquier culpable que esté acaparando recursos y asegurar que los servicios esenciales permanezcan operativos. Al final de este desafío, habrás demostrado tu capacidad para gestionar un entorno Linux real bajo presión, una habilidad fundamental para cualquier administrador de sistemas.

Aviso Importante
Los próximos desafíos pueden exceder el alcance del curso Inicio Rápido con Linux.
Si encuentras dificultades durante el desafío:
  1. Omite temporalmente el desafío y continúa con los laboratorios guiados posteriores en la ruta de aprendizaje de Linux.
  2. Consulta con Labby o revisa la solución.
Este es un Desafío (Challenge), que se diferencia de un Laboratorio Guiado en que debes intentar completar la tarea de forma independiente, en lugar de seguir pasos de aprendizaje. Los desafíos suelen ser algo difíciles. Si te resulta complicado, puedes debatir con Labby o consultar la solución. Los datos históricos muestran que este es un desafío de nivel principiante con una tasa de aprobación del 96%. Ha recibido una tasa de valoraciones positivas del 96% por parte de los alumnos.

Listado de Procesos Activos del Sistema

Tu primer paso como Supervisor de Procesos es obtener una imagen completa de lo que se está ejecutando actualmente en el servidor. Una instantánea estática de todos los procesos activos te ayudará a comenzar tu investigación e identificar cualquier anomalía.

Tareas

  • Utiliza un único comando para generar una lista detallada de todos los procesos que se ejecutan en el sistema.

Requisitos

  • El comando debe mostrar los procesos de todos los usuarios, no solo los tuyos.
  • El formato de salida debe estar orientado al usuario, mostrando detalles como el propietario del proceso, el uso de CPU/memoria y el comando completo que lo inició.

Ejemplos

Tras ejecutar el comando, deberías ver una salida similar a esta:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1 169848  9064 ?        Ss   08:30   0:02 /sbin/init
labex     1234  0.0  0.0   2324   564 pts/0    S+   08:35   0:00 bash /home/labex/project/resource_hog.sh
labex     1235  0.0  0.0   2324   564 ?        S    08:35   0:00 bash /home/labex/project/critical_service.sh
...

La salida mostrará múltiples procesos con columnas para el usuario, el ID del proceso, el uso de CPU, el uso de memoria y el comando que inició cada proceso.

Pistas

  • El comando más común para esta tarea es ps.
  • Piensa en qué opciones del comando ps mostrarían los procesos de todos los usuarios (all users), en un formato amigable para el usuario (user-friendly), e incluirían procesos no vinculados a una terminal (texminal).
✨ Revisar Solución y Practicar

Supervisión del Uso de Recursos de los Procesos

La lista estática de ps fue un buen comienzo, pero la carga del servidor cambia cada segundo. Necesitas una vista dinámica en vivo para ver qué proceso está causando activamente la ralentización. Es hora de recurrir a una herramienta de monitorización más potente.

Tareas

  • Inicia una utilidad interactiva de línea de comandos para supervisar los procesos del sistema y su uso de recursos en tiempo real.
  • Identifica el nombre del script que está consumiendo más CPU.

Requisitos

  • Debes utilizar una herramienta que proporcione una vista en tiempo real y continuamente actualizada de los procesos del sistema.
  • La herramienta debe permitirte ordenar los procesos por uso de CPU de forma predeterminada.
  • Una vez que hayas identificado al principal consumidor, sal de la herramienta para pasar al siguiente paso.

Ejemplos

Cuando inicies la herramienta de monitorización, deberías ver una pantalla interactiva que se actualiza automáticamente, mostrando algo como:

top - 09:15:30 up  1:45,  1 user,  load average: 1.50, 1.20, 0.85
Tasks: 105 total,   2 running, 103 sleeping,   0 stopped,   0 zombie
%Cpu(s): 45.0 us,  5.0 sy,  0.0 ni, 50.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   2048.0 total,    850.4 free,    950.2 used,    247.4 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used,      0.0 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 1234 labex     20   0   12884   1564   1320 R  95.0   0.1   2:15.30 bash /home/labex/project/resource_hog.sh
 1235 labex     20   0   12884   1564   1320 S   0.0   0.1   0:00.00 bash /home/labex/project/critical_service.sh
    1 root      20   0  169848   9064   6868 S   0.0   0.4   0:02.15 systemd
...

La pantalla mostrará estadísticas del sistema en la parte superior y una lista de procesos ordenados por uso de CPU, con el proceso que más consume en la parte superior.

Pistas

  • Este popular comando suele conocerse como el "Administrador de Tareas" del mundo Linux.
  • Puedes salir de esta herramienta interactiva pulsando la tecla q.
✨ Revisar Solución y Practicar

Identificación de Procesos Clave

Has encontrado al alborotador: resource_hog.sh. Sin embargo, un buen administrador de sistemas no se limita a finalizar procesos de forma indiscriminada. También has notado que critical_service.sh se está ejecutando. Antes de tomar cualquier medida contra el proceso problemático, debes identificar y comprender todos los procesos clave que se ejecutan en el sistema.

Tareas

  • Encuentra el ID de proceso (PID) del script critical_service.sh.
  • Verifica que el servicio crítico se está ejecutando correctamente.

Requisitos

  • Debes utilizar el comando pgrep para encontrar el PID del proceso que ejecuta critical_service.sh.
  • El comando debe localizar con éxito el proceso en ejecución y mostrar su PID.

Ejemplos

Tras encontrar el PID con pgrep, deberías ver una salida como:

1235

Este número (1235 en este ejemplo) es el ID de proceso del servicio crítico.

Puedes verificar los detalles del proceso usando:

ps -p 1235 -o pid,ppid,cmd

Lo cual debería mostrar una salida similar a:

PID PPID CMD
1235 1 /bin/bash /home/labex/project/critical_service.sh

Pistas

  • pgrep puede encontrar un PID basándose en el nombre de un proceso.
  • Usa pgrep -f para buscar coincidencias en la línea de comandos completa.
✨ Revisar Solución y Practicar

Finalización de un Proceso con Mal Comportamiento

Ahora que has identificado los procesos clave, es hora de ocuparse de resource_hog.sh, que ha estado ralentizando el servidor. Debes finalizar este proceso para restaurar el funcionamiento normal.

Tareas

  • Finaliza el proceso resource_hog.sh.

Requisitos

  • Debes utilizar un comando que pueda finalizar un proceso basándose en su nombre, sin necesidad de buscar primero su PID.
  • Utiliza el comando pkill para detener el script resource_hog.sh.

Ejemplos

Para verificar que el proceso ha sido finalizado, puedes comprobar la lista de procesos después. Antes de la finalización, podrías ver:

labex 1234 95.0 0.0 2324 564 pts/0 R+ 09:15 5:00 bash /home/labex/project/resource_hog.sh

Tras una finalización exitosa, al ejecutar el mismo comando de comprobación no deberían aparecer procesos coincidentes (solo el propio comando grep):

labex 2345 0.0 0.0 2324 564 pts/0 S+ 09:20 0:00 grep resource_hog

Pistas

  • El comando pkill envía una señal de terminación a los procesos basándose en su nombre.
  • Después de ejecutar el comando, puedes usar ps aux | grep resource_hog para verificar que el proceso ya no está en ejecución.
✨ Revisar Solución y Practicar

Inicio y Gestión de Procesos en Segundo Plano

¡El servidor vuelve a estar estable! Excelente trabajo. Justo cuando estás a punto de tomarte un descanso, un desarrollador te envía un mensaje. Necesitan que ejecutes un script de larga duración, data_processor.sh, en el servidor. No puedes mantener tu sesión de terminal abierta durante horas solo para este script. Necesitas ejecutarlo en segundo plano para que continúe incluso después de cerrar la sesión.

Tareas

  • Inicia el script data_processor.sh de modo que se ejecute en segundo plano y sea inmune a las desconexiones (es decir, que no se detenga si cierras tu terminal).

Requisitos

  • Debes estar en el directorio ~/project.
  • Utiliza el comando nohup para ejecutar el script.
  • Utiliza el operador & para enviar el proceso al segundo plano.
  • Redirige toda la salida (tanto la salida estándar como el error estándar) del script a un archivo llamado processor.log.

Ejemplos

Tras iniciar con éxito el script en segundo plano, deberías ver una salida similar a:

[1] 3456
nohup: ignoring input and appending output to 'processor.log'

El [1] 3456 indica el número de tarea (job) y el ID del proceso. Puedes verificar que el script se está ejecutando consultando el archivo de registro:

cat processor.log

Esto podría mostrar una salida como:

Starting data processing at Mon Sep 11 10:30:00 UTC 2025

Y puedes confirmar que el proceso sigue activo:

ps aux | grep data_processor

Lo cual debería mostrar que el proceso en segundo plano está activo.

Pistas

  • El comando nohup significa "no hang up" (no colgar).
  • El símbolo & al final de un comando le indica a la shell que lo ejecute como una tarea en segundo plano.
  • Puedes redirigir la salida estándar con > y el error estándar con 2>&1.
✨ Revisar Solución y Practicar

Resumen

¡Felicidades, Administrador! Has gestionado con éxito un problema crítico de rendimiento del servidor y has demostrado tu dominio de la gestión de procesos en Linux. El servidor está estable, los servicios críticos tienen prioridad y las tareas de larga duración avanzan sin problemas en segundo plano.

En este desafío, has demostrado tu capacidad para:

  • Listar e inspeccionar todos los procesos en ejecución mediante ps.
  • Supervisar los recursos del sistema en tiempo real con top.
  • Identificar procesos importantes utilizando pgrep.
  • Finalizar limpiamente procesos con mal comportamiento mediante pkill.
  • Ejecutar y gestionar tareas en segundo plano que persisten tras el cierre de sesión usando nohup y &.

Estas son habilidades fundamentales y de alto valor, esenciales para cualquier rol en administración de sistemas, DevOps o desarrollo backend. Has convertido una crisis potencial en una oportunidad para demostrar tu experiencia. ¡Bien hecho!