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
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
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
pspermite visualizar información detallada de los procesos en ejecución, incluyendo el usuario propietario, consumo de CPU y memoria, y estado. topmuestra una vista dinámica en tiempo real de los procesos más activos.htopes 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:
killpermite terminar un proceso específico mediante su PID.pkillykillallpermiten finalizar procesos por nombre.niceyreniceajustan 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.
uptimeywmuestran el promedio de carga del sistema.vmstateiostatpermiten 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
TTYindica 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 columnaTTY.
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 aSIGINT, 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.