Skip to content

Introducción

El monitoreo y gestión de procesos en Linux es clave para administrar los recursos del sistema y garantizar un rendimiento óptimo. Cada proceso tiene un ciclo de vida, estados específicos y puede afectar la estabilidad del sistema. A través de herramientas de monitoreo y técnicas de administración, los usuarios pueden controlar procesos, ajustar prioridades, gestionar trabajos en segundo plano y administrar señales para finalizar o modificar su ejecución de manera eficiente.

Objetivos

Este apartado tiene como finalidad:

  • Explicar los fundamentos de la gestión de procesos en Linux, incluyendo su ciclo de vida, estados y la interacción con el sistema operativo.
  • Describir las herramientas disponibles para el monitoreo de procesos y la interpretación de métricas de carga del sistema.
  • Analizar la ejecución y manipulación de trabajos en Bash, distinguiendo entre procesos en primer y segundo plano.
  • Examinar la gestión de señales en Linux, incluyendo su uso para la suspensión, finalización o reinicio de procesos.
  • Presentar las mejores prácticas para el cierre administrativo de sesiones de usuario y la terminación selectiva de procesos.

Monitoreo y Gestión de Procesos

Definición y Ciclo de Vida de un Proceso

Ciclo de Vida de Procesos

Un proceso es una instancia de un programa en ejecución, con su propio espacio de direcciones, propiedades de seguridad y subprocesos de ejecución.

Cada proceso tiene un PID (Process ID) único y puede generar procesos adicionales mediante bifurcación (fork).

Todos los procesos en un sistema Linux derivan del primer proceso del sistema, systemd.

Estados de los Procesos

Estados de los Procesos

Los procesos pueden estar en diferentes estados según su interacción con el sistema:

  • Ejecutándose (R): En ejecución o en cola para ejecutarse.
  • En espera (S): Esperando un evento o recurso.
  • Ininterrumpible (D): No responde a señales, usado para operaciones críticas.
  • Detenido (T): Suspendido por otro proceso o usuario.
  • Zombie (Z): Finalizado pero aún registrado en la tabla de procesos.

Listar y Monitorear Procesos

  • El comando ps permite visualizar información detallada de los procesos en ejecución, incluyendo el usuario propietario, consumo de CPU y memoria, y estado.
  • top muestra una vista dinámica en tiempo real de los procesos más activos.
  • htop es una alternativa más visual e interactiva para monitorear procesos.

Control de Procesos

Se pueden enviar señales a los procesos para suspender, detener, reanudar o finalizar su ejecución:

  • kill permite terminar un proceso específico mediante su PID.
  • pkill y killall permiten finalizar procesos por nombre.
  • nice y renice ajustan la prioridad de los procesos para optimizar el uso de recursos.

Promedio de Carga y Consumo de Recursos

El promedio de carga indica la cantidad de procesos en espera de ejecución en un período determinado.

  • uptime y w muestran el promedio de carga del sistema.
  • vmstat e iostat permiten analizar el uso de CPU, memoria y discos.

Control de Trabajos en Bash

Concepto de Trabajos y Sesiones

En Bash, un trabajo es cualquier comando o conjunto de procesos iniciados desde una misma sesión de terminal.

Los procesos dentro de un trabajo forman un grupo de procesos, lo que permite gestionarlos de manera conjunta.

Cada terminal es su propia sesión, con un proceso en primer plano y múltiples procesos en segundo plano.

Procesos en Primer Plano y Segundo Plano

  • Un proceso en primer plano es aquel que interactúa directamente con el usuario y recibe señales del teclado.
  • Un proceso en segundo plano no puede recibir entradas del teclado, pero sigue ejecutándose en la sesión.
  • Si un proceso en segundo plano intenta leer desde el terminal, se suspende automáticamente.

Gestión de Trabajos en Segundo Plano

Para ejecutar un comando en segundo plano, se usa el operador &:

sleep 10000 &

La shell asigna un número de trabajo y muestra el PID del proceso.

Para listar los trabajos en segundo plano, se usa el comando:

jobs

Para traer un trabajo al primer plano:

fg %1

Para suspender un proceso en primer plano, se usa Ctrl + Z, lo que lo coloca en segundo plano en estado detenido.

Reanudación y Terminación de Trabajos

Para reanudar un proceso suspendido en segundo plano:

bg %1

Para finalizar un proceso en segundo plano:

kill 5947

Si un usuario intenta cerrar la terminal con trabajos suspendidos, la shell emite una advertencia.

Visualización de Información de Procesos

El comando ps j muestra detalles sobre los procesos y sus relaciones dentro de la sesión:

ps j
  • La columna TTY indica el terminal de control del proceso.
  • Los procesos iniciados por el sistema, como los daemons, no tienen un terminal de control y aparecen con ? en la columna TTY.

Finalización de Procesos y Señales en Linux

Concepto de Señales en Linux

Una señal es una interrupción de software enviada a un proceso para notificar eventos como errores, solicitudes de entrada/salida o comandos explícitos.

Los procesos pueden recibir señales para detenerse, reiniciarse o cambiar su estado.

Tipos de Señales Comunes

  • SIGHUP (1): Indica la finalización de la sesión de terminal y solicita la recarga de configuración.
  • SIGINT (2): Interrumpe un proceso desde el teclado (Ctrl + C).
  • SIGQUIT (3): Similar a SIGINT, pero genera un volcado de memoria (Ctrl + \).
  • SIGKILL (9): Finaliza un proceso de manera abrupta, sin posibilidad de bloqueo.
  • SIGTERM (15): Solicita la finalización de un proceso de manera controlada.
  • SIGSTOP (19): Suspende un proceso sin posibilidad de bloqueo.
  • SIGCONT (18): Reanuda un proceso suspendido.

Cada señal tiene una acción predeterminada que, por lo general, es una de las siguientes: - Term: provoca que un programa finalice (se cierre) inmediatamente. - Core: provoca que un programa guarde una imagen de la memoria (volcado central) y que, a continuación, finalice. - Stop: provoca que un programa deje de ejecutarse (se suspenda) y espere para continuar (se reinicie).

Envío de Señales a Procesos

  • Para finalizar un proceso en primer plano: Ctrl + C
  • Para suspender un proceso en primer plano: Ctrl + Z

Enviar señales con kill:

kill -SIGTERM 5194

Listar todas las señales disponibles:

kill -l

Finalización de Procesos con pkill y killall

Finalizar procesos por nombre o usuario con pkill:

pkill -SIGKILL -u bob

Importante: Los administradores suelen usar SIGKILL. Siempre es grave porque la señal SIGKILL no puede manipularse ni ignorarse. Sin embargo, obliga a la finalización sin permitir que el proceso terminado ejecute rutinas de auto-limpieza. Red Hat recomienda enviar primero SIGTERM, a continuación intentar con SIGINT y, solo si falla en ambos casos, volver a intentar con SIGKILL.

Finalizar todos los procesos con un nombre específico con killall:

killall control

Cierre de Sesiones de Usuarios

Identificar la terminal del usuario:

w -u bob

Finalizar procesos asociados a la sesión:

pkill -t tty3

Conclusión

El conocimiento sobre la gestión de procesos permite a los administradores optimizar el rendimiento del sistema, controlar la carga de trabajo y manejar eficientemente la ejecución de tareas. El uso de herramientas como ps, top, kill y pkill, junto con una administración precisa de trabajos en Bash, garantiza un control detallado y una respuesta rápida ante problemas de rendimiento. Dominar estos conceptos es esencial para la administración efectiva de sistemas Linux.