Visualización de procesos en Linux

LinuxBeginner
Practicar Ahora

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.

Este es un Guided Lab, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel principiante con una tasa de finalización del 95%. Ha recibido una tasa de reseñas positivas del 97% por parte de los estudiantes.

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

  1. Abre tu terminal en el entorno LabEx. Deberías comenzar en el directorio ~/project.

  2. Escribe el siguiente comando y presiona Enter:

ps
  1. 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 proceso
  • TTY: Tipo de terminal, que indica en qué terminal se está ejecutando el proceso
  • TIME: La cantidad de tiempo de CPU que ha utilizado el proceso
  • CMD: 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 ps que 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

  1. En tu terminal, escribe el siguiente comando y presiona Enter:
ps -e
  1. 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 arranca
  • supervisord es un sistema de control de procesos
  • sshd es el demonio del servidor SSH
  • dbus-daemon es el demonio del bus de mensajes D-Bus
  • xfce4-session es 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

  1. En tu terminal, escribe el siguiente comando y presiona Enter:
ps -ef
  1. 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 proceso
  • PID: Identificador de proceso
  • PPID: Identificador del proceso padre (el proceso que inició este)
  • C: Utilización de la CPU
  • STIME: Hora de inicio del proceso
  • TTY: Terminal asociada con el proceso
  • TIME: Tiempo de CPU utilizado por el proceso
  • CMD: 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 ejecutarse
  • S: Dormido en una espera interrumpible
  • D: Sueño ininterrumpible (generalmente por E/S)
  • Z: Proceso zombie
  • T: Detenido o siendo rastreado

Pueden aparecer caracteres adicionales después de la letra de estado:

  • <: Alta prioridad
  • N: Baja prioridad
  • s: 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:

  1. Resumen del sistema (5 líneas superiores)
  2. 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 M para ordenar por uso de memoria
  • Presiona P para ordenar por uso de CPU
  • Presiona k seguido de un PID para terminar un proceso
  • Presiona h para 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:

  1. Información básica de procesos: Aprendiste a usar el comando básico ps para ver los procesos asociados con tu sesión de terminal actual, comprendiendo el formato básico de salida, incluyendo PID, TTY, TIME y CMD.

  2. Visualización de procesos en todo el sistema: Dominaste el uso de ps -e para ver todos los procesos en ejecución en el sistema, no solo aquellos asociados con tu terminal.

  3. Información detallada de procesos: Exploraste el comando ps -ef para obtener información detallada sobre los procesos, incluyendo identificadores de usuario, identificadores de procesos padre, tiempos de inicio y líneas de comandos completas.

  4. Ordenación y formato avanzados: Descubriste cómo crear salidas personalizadas con columnas específicas y opciones de ordenación utilizando ps -eo y el parámetro --sort.

  5. Monitoreo en tiempo real: Aprendiste a usar el comando top para ver procesos en tiempo real dinámico y cómo combinar ps con otras utilidades como watch para 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.