Introducción
La gestión de procesos es un aspecto fundamental de la administración de sistemas Linux. Cada programa o comando que ejecutes en Linux crea un proceso, y monitorear estos procesos es esencial para mantener el rendimiento del sistema y solucionar problemas.
Este laboratorio (lab) te guiará en el dominio del comando ps, una herramienta poderosa para monitorear y gestionar los procesos que se ejecutan en un sistema Linux. Al entender cómo usar el comando ps y sus diversas opciones, obtendrás información valiosa sobre lo que está sucediendo en tu sistema en cualquier momento dado.
A lo largo de este laboratorio, aprenderás a mostrar los procesos en diferentes formatos, ver todos los procesos del sistema y comprender la información detallada que ps puede proporcionar sobre cada proceso.
Comprender la información básica de los procesos
En Linux, cada programa o comando en ejecución está representado por un proceso. Cada proceso tiene un identificador único conocido como Identificador de Proceso (Process ID, PID). El comando ps te permite ver estos procesos y obtener información sobre ellos.
Comencemos explorando el uso básico del comando ps.
Comando ps básico
Abre tu terminal en el entorno LabEx. Deberías comenzar en el directorio
~/project.Escribe el siguiente comando y presiona Enter:
ps
- Verás una salida similar a esta:
PID TTY TIME CMD
188 pts/0 00:00:00 zsh
449 pts/0 00:00:00 ps
Vamos a entender lo que significa esta salida:
PID: Identificador de Proceso, un número único asignado a cada procesoTTY: Tipo de terminal, que indica en qué terminal se está ejecutando el procesoTIME: La cantidad de tiempo de CPU que ha utilizado el procesoCMD: El comando que inició el proceso
En este ejemplo, puedes ver:
- El proceso de la shell
zsh(tu sesión de terminal actual) - El comando
psque acabas de ejecutar
El comando ps por defecto solo muestra los procesos asociados a tu sesión de terminal actual. Esto es útil para comprobar rápidamente qué comandos has ejecutado recientemente, pero no te da una imagen completa de lo que está sucediendo en tu sistema.
Intenta ejecutar otro comando y luego ejecuta ps de nuevo para ver cómo cambia la salida:
echo "Hello, world"
ps
Te darás cuenta de que el comando echo no aparece en la lista de procesos. Esto se debe a que se inició y terminó tan rápidamente que ya no estaba en ejecución cuando ejecutaste el comando ps.
Visualizar todos los procesos del sistema
En el paso anterior, aprendiste que el comando ps básico solo muestra los procesos relacionados con tu terminal actual. Sin embargo, un sistema Linux típico tiene muchos procesos en ejecución simultáneamente, la mayoría de los cuales no están directamente relacionados con tu sesión de terminal.
Para obtener una imagen más completa de lo que está sucediendo en tu sistema, puedes usar la opción -e con el comando ps.
Usar ps -e para ver todos los procesos
- En tu terminal, escribe el siguiente comando y presiona Enter:
ps -e
- Verás una lista de procesos mucho más larga, similar a esta:
PID TTY TIME CMD
1 ? 00:00:00 init.sh
22 ? 00:00:00 supervisord
23 ? 00:00:00 sshd
32 ? 00:00:00 dbus-daemon
35 ? 00:00:00 xfce4-session
···
Esta salida muestra todos los procesos en ejecución en el sistema, no solo aquellos asociados con tu terminal. Observa que muchos procesos tienen un ? en la columna TTY. Esto indica que estos procesos no están asociados con ninguna terminal.
Comprender los procesos del sistema
Muchos de los procesos que ves son servicios del sistema que se ejecutan en segundo plano. Por ejemplo:
init.sh(PID 1) es el primer proceso que se inicia cuando el sistema arrancasupervisordes un sistema de control de procesossshdes el demonio del servidor SSHdbus-daemones el demonio del bus de mensajes D-Busxfce4-sessiones parte del entorno de escritorio Xfce
Estos procesos manejan diversas funciones del sistema y proporcionan los servicios que hacen que tu sistema Linux sea utilizable.
Contar el número de procesos
Si quieres saber cuántos procesos se están ejecutando actualmente en tu sistema, puedes enviar la salida de ps -e al comando wc:
ps -e | wc -l
El número mostrado representa el recuento total de procesos en ejecución en tu sistema, más una línea para el encabezado.
Mostrar información detallada de los procesos
Ahora que puedes ver todos los procesos en ejecución en tu sistema, aprendamos cómo obtener información más detallada sobre cada proceso. La opción -f del comando ps proporciona una lista en "formato completo" con detalles adicionales.
Usar ps -ef para obtener información detallada
- En tu terminal, escribe el siguiente comando y presiona Enter:
ps -ef
- Verás una salida similar a esta:
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 16:45 ? 00:00:00 /bin/bash /etc/shiyanlou/sbin/init.sh
root 22 1 0 16:45 ? 00:00:00 /usr/bin/python3 /usr/bin/supervisord -n
root 23 22 0 16:45 ? 00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
labex 188 187 0 16:46 pts/0 00:00:00 -zsh
labex 677 188 0 16:55 pts/0 00:00:00 ps -ef
Este formato proporciona mucha más información detallada sobre cada proceso:
UID: Identificador de usuario del propietario del procesoPID: Identificador de procesoPPID: Identificador del proceso padre (el proceso que inició este)C: Utilización de la CPUSTIME: Hora de inicio del procesoTTY: Terminal asociada con el procesoTIME: Tiempo de CPU utilizado por el procesoCMD: Comando completo con sus argumentos
Comprender las relaciones entre procesos
La columna PPID es especialmente útil para entender cómo se relacionan los procesos entre sí. Cada proceso (excepto el primero) es iniciado por otro proceso, creando una relación padre-hijo.
Por ejemplo, en la salida anterior:
- El proceso con PID 1 (init.sh) tiene un PPID de 0 (es el primer proceso)
- El proceso con PID 22 (supervisord) tiene un PPID de 1 (fue iniciado por init.sh)
- El proceso con PID 23 (sshd) tiene un PPID de 22 (fue iniciado por supervisord)
Esta relación jerárquica forma un "árbol de procesos", que se puede visualizar con herramientas especializadas como pstree (no cubierto en este laboratorio).
Filtrar información de procesos
Puedes combinar ps con grep para filtrar procesos específicos. Por ejemplo, para encontrar todos los procesos relacionados con la shell zsh:
ps -ef | grep zsh
Esto mostrará todos los procesos que tienen "zsh" en el nombre de su comando.
Intenta buscar otros procesos en tu sistema:
ps -ef | grep bash
Esta combinación de ps con herramientas de filtrado lo convierte en un comando poderoso para el monitoreo y la resolución de problemas del sistema.
Ordenación de información de procesos y opciones avanzadas
Ahora que has aprendido sobre la información básica de procesos y listados detallados, exploremos algunas opciones adicionales que hacen que el comando ps sea aún más útil.
Formato personalizado con ps
El comando ps te permite crear salidas personalizadas con información específica que te interese. La opción -o te permite especificar qué columnas mostrar:
ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu
Este comando muestra:
- Identificador de proceso (pid)
- Identificador del proceso padre (ppid)
- Comando (cmd)
- Porcentaje de uso de CPU (%cpu)
- Porcentaje de uso de memoria (%mem)
El parámetro --sort=-%cpu ordena los procesos por uso de CPU en orden descendente (el signo menos antes de %cpu indica orden descendente).
Deberías ver una salida similar a esta:
PID PPID CMD %CPU %MEM
789 788 ps -eo pid,ppid,cmd,%cpu,% 0.0 0.1
188 187 -zsh 0.0 0.1
35 34 xfce4-session 0.0 0.2
32 1 /usr/bin/dbus-daemon --sys 0.0 0.0
23 22 sshd: /usr/sbin/sshd -D [l 0.0 0.1
22 1 /usr/bin/python3 /usr/bin/ 0.0 0.2
1 0 /bin/bash /etc/shiyanlou/s 0.0 0.0
Encontrar procesos que consumen mucha memoria
Si quieres identificar qué procesos están utilizando más memoria, puedes ordenar por uso de memoria en su lugar:
ps -eo pid,user,cmd,%mem --sort=-%mem | head -n 6
Este comando muestra los 5 procesos que consumen más memoria (más la línea de encabezado) con su PID, usuario, comando y porcentaje de uso de memoria.
Comprender los estados de los procesos
Los procesos pueden estar en diferentes estados. Veamos esta información:
ps -eo pid,stat,cmd
La columna STAT muestra el estado del proceso utilizando códigos de una sola letra:
R: En ejecución o listo para ejecutarseS: Dormido en una espera interrumpibleD: Sueño ininterrumpible (generalmente por E/S)Z: Proceso zombieT: Detenido o siendo rastreado
Pueden aparecer caracteres adicionales después de la letra de estado:
<: Alta prioridadN: Baja prioridads: Líder de sesión+: En el grupo de procesos en primer plano
Esta información ayuda a entender qué están haciendo los procesos en un momento dado.
Vista jerárquica con pstree
Si bien no forma parte del comando ps en sí, el comando pstree proporciona una representación visual de la jerarquía de procesos:
pstree
Esto muestra las relaciones entre los procesos en un formato similar a un árbol, lo que facilita entender cómo se relacionan los procesos entre sí.
Monitoreo en tiempo real de procesos
Si bien el comando ps proporciona una instantánea de los procesos en un momento determinado, a veces es necesario monitorear los procesos de forma continua. En este paso, exploraremos herramientas para el monitoreo en tiempo real de procesos.
Uso del comando top
El comando top proporciona una vista dinámica en tiempo real del sistema en ejecución. Muestra información resumida del sistema, así como una lista de procesos o hilos actualmente gestionados por el núcleo de Linux.
Ejecuta el siguiente comando:
top
Verás algo como esto:
top - 17:15:23 up 30 min, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 31 total, 1 running, 30 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1975.1 total, 1558.7 free, 180.4 used, 236.1 buff/cache
MiB Swap: 975.0 total, 975.0 free, 0.0 used. 1651.3 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 8988 3208 2556 S 0.0 0.2 0:00.07 init.sh
22 root 20 0 39528 8596 6088 S 0.0 0.4 0:00.20 supervisord
23 root 20 0 12128 6788 5864 S 0.0 0.3 0:00.00 sshd
...
La salida se divide en dos partes:
- Resumen del sistema (5 líneas superiores)
- Lista de procesos (ordenada por uso de CPU por defecto)
Para salir de top, presiona la tecla q.
Comprensión de la salida de top
El resumen del sistema proporciona:
- Tiempo de actividad y promedios de carga
- Recuento de tareas por estado (en ejecución, en espera, detenidas, zombies)
- Desglose del uso de CPU
- Uso de memoria y espacio de intercambio (swap)
La lista de procesos muestra:
- PID: Identificador de proceso
- USER: Usuario propietario
- PR: Prioridad
- NI: Valor nice
- VIRT: Memoria virtual utilizada
- RES: Memoria residente utilizada
- SHR: Memoria compartida
- S: Estado del proceso
- %CPU: Uso de CPU
- %MEM: Uso de memoria
- TIME+: Tiempo de CPU utilizado
- COMMAND: Nombre del comando
Comandos interactivos en top
Mientras top está en ejecución, puedes usar varios comandos de teclado para interactuar con él:
- Presiona
Mpara ordenar por uso de memoria - Presiona
Ppara ordenar por uso de CPU - Presiona
kseguido de un PID para terminar un proceso - Presiona
hpara obtener ayuda
Intenta presionar M mientras se ejecuta top para ver los procesos ordenados por uso de memoria.
Uso del comando watch con ps
Otro enfoque para el monitoreo en tiempo real es usar el comando watch con ps. Esto ejecuta un comando periódicamente y muestra la salida, lo que te permite ver los cambios a lo largo del tiempo.
watch -n 1 'ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu | head -n 6'
Esto se actualiza cada 1 segundo y muestra los 5 procesos que consumen más CPU.
Para salir de watch, presiona Ctrl+C.
La combinación de ps con utilidades como watch te brinda capacidades poderosas para monitorear los procesos de tu sistema en tiempo real.
Resumen
A lo largo de este laboratorio, has aprendido habilidades esenciales para monitorear y gestionar procesos en un sistema Linux utilizando el comando ps y herramientas relacionadas. Aquí está un resumen de lo que has cubierto:
Información básica de procesos: Aprendiste a usar el comando básico
pspara ver los procesos asociados con tu sesión de terminal actual, comprendiendo el formato básico de salida, incluyendo PID, TTY, TIME y CMD.Visualización de procesos en todo el sistema: Dominaste el uso de
ps -epara ver todos los procesos en ejecución en el sistema, no solo aquellos asociados con tu terminal.Información detallada de procesos: Exploraste el comando
ps -efpara obtener información detallada sobre los procesos, incluyendo identificadores de usuario, identificadores de procesos padre, tiempos de inicio y líneas de comandos completas.Ordenación y formato avanzados: Descubriste cómo crear salidas personalizadas con columnas específicas y opciones de ordenación utilizando
ps -eoy el parámetro--sort.Monitoreo en tiempo real: Aprendiste a usar el comando
toppara ver procesos en tiempo real dinámico y cómo combinarpscon otras utilidades comowatchpara un monitoreo continuo.
Estas habilidades son fundamentales para la administración de sistemas, la resolución de problemas y el monitoreo de rendimiento en entornos Linux. Comprender qué procesos están en ejecución y cómo consumen recursos del sistema es esencial para mantener la salud del sistema y diagnosticar problemas.
A medida que continúes trabajando con sistemas Linux, la capacidad de monitorear y gestionar procesos de manera efectiva será una de tus habilidades más valiosas.



