Cuando el sistema va lento o quieres saber qué está corriendo exactamente, necesitas una forma de interrogar al kernel sobre los procesos activos. Eso es precisamente lo que hacen estas herramientas: leer la información que el kernel expone en /proc y presentártela de forma legible. El kernel mantiene una entrada en ese directorio virtual por cada proceso vivo — /proc/1234/ para el PID 1234, por ejemplo — con ficheros que describen su estado, memoria consumida, descriptores abiertos, y más. ps, top y htop no hacen magia: básicamente leen esos ficheros y los formatean.
Usas ps cuando quieres una fotografía estática del sistema en un momento dado, típicamente para filtrar, procesar con grep o awk, o capturar en un script. Usas top o htop cuando quieres observar el sistema en tiempo real, ver qué proceso está comiendo CPU ahora mismo, o reaccionar interactivamente. Si usas ps para monitorizar en un bucle con watch, estás reinventando top de forma menos eficiente.
Lo que puedes romper si confundes las métricas: VSZ y RSS son las dos que generan más confusión. VSZ (Virtual Size) es el espacio de direcciones virtuales que el kernel ha asignado al proceso — incluye librerías mapeadas que quizás nunca se van a leer, memoria reservada pero no usada, y segmentos compartidos. Puede parecer enorme y no refleja lo que realmente está ocupando RAM. RSS (Resident Set Size) es la memoria física que el proceso tiene actualmente cargada en RAM. Si ves un proceso con VSZ de 800 MB y RSS de 40 MB, no te alarmes por los 800 MB: lo relevante para la presión de memoria es el RSS. Dicho esto, RSS tampoco cuenta correctamente la memoria compartida entre procesos (como las librerías del sistema que comparten varios programas), así que para análisis serio de memoria hay herramientas más precisas, pero para el día a día RSS es tu referencia.
Ejemplo completo: de la foto estática al monitor interactivo
# Ver todos los procesos del sistema con sintaxis BSD ps aux # La cabecera que verás: # USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND # root 1 0.0 0.1 167936 11520 ? Ss 10:02 0:01 /sbin/init # www-data 1023 0.2 1.4 512040 57344 ? S 10:05 0:12 /usr/sbin/apache2 # Filtrar sólo los procesos de un usuario concreto ps aux | grep "^www-data" # Sintaxis Unix clásica (equivalente funcional para la mayoría de casos) ps -ef # Ver el árbol de procesos: quién lanzó a quién ps --forest -e -o pid,ppid,user,comm # Ejemplo de salida de --forest: # PID PPID USER COMMAND # 1 0 root systemd # 945 1 root \_ sshd # 1102 945 root \_ sshd # 1103 1102 debian \_ bash # 1201 1103 debian \_ ps # Lanzar top (salir con 'q') top # Teclas útiles dentro de top: # P -> ordenar por %CPU (comportamiento por defecto) # M -> ordenar por %MEM (útil para cazar memory leaks) # u -> filtrar por usuario (te preguntará el nombre) # k -> matar proceso (te pedirá el PID y la señal; por defecto SIGTERM=15) # r -> renice (cambiar prioridad; te pedirá PID y nuevo valor nice) # q -> salir # Instalar htop si no está presente (no viene por defecto en Debian) sudo apt install htop # Lanzar htop htop # Teclas útiles dentro de htop: # Flechas arriba/abajo -> navegar por la lista # F3 o / -> buscar proceso por nombre # t -> alternar vista de árbol (como --forest) # F9 -> matar proceso (menú con señales disponibles) # F6 -> cambiar columna de ordenación # q -> salir # btop: alternativa más visual, también disponible en Debian sudo apt install btop btop
Lo que está pasando en cada paso
ps aux usa la sintaxis BSD: las opciones no llevan guión. La a incluye procesos de todos los usuarios, la u añade las columnas de usuario y memoria, y la x incluye procesos sin terminal de control (los daemons del sistema, que son la mayoría). Sin la x no verías systemd, sshd, ni ningún servicio. La columna STAT merece atención: S es sleeping (esperando un evento), R es running, Z es zombie (el proceso terminó pero su padre no ha recogido el código de salida), s indica líder de sesión, + indica proceso en primer plano de su terminal. Un puñado de zombies ocasionales es normal; cientos de zombies apunta a un bug en el proceso padre.
ps -ef es la sintaxis Unix System V: con guión. Produce una salida similar pero con columnas ligeramente diferentes (incluye PPID explícitamente). En scripts que necesitan portabilidad a sistemas que no son Linux, -ef es más seguro que aux.
ps --forest revela la jerarquía padre-hijo directamente en la salida. En el ejemplo puedes ver que bash (PID 1103) es hijo de la sesión SSH, y que el propio ps que estás ejecutando es hijo de ese bash. Esto es útil para entender qué proceso lanzó qué, especialmente cuando hay varios python3 o java corriendo y necesitas distinguirlos.
En top, el header te da información crítica antes de llegar a la lista de procesos: el load average muestra la carga media del sistema en los últimos 1, 5 y 15 minutos. Un valor consistentemente por encima del número de CPUs de tu máquina indica saturación. La línea de memoria te muestra si estás usando swap activamente — si el valor de swap usado crece mientras observas, tienes un problema real de memoria.
La tecla k en top no mata el proceso inmediatamente de forma brusca: te pide el PID y luego la señal. El defecto es 15 (SIGTERM), que pide al proceso que termine limpiamente. Si el proceso no responde a SIGTERM, entonces usas 9 (SIGKILL), que el kernel ejecuta sin posibilidad de que el proceso lo ignore. Empezar siempre por SIGTERM es buena práctica.
htop hace todo lo que top pero con navegación con teclado, colores que distinguen procesos de usuario vs. del kernel, y sin necesidad de recordar teclas poco intuitivas. La búsqueda con / filtra la lista en tiempo real. La vista de árbol con t es directamente equivalente a ps --forest pero actualizada en vivo. La razón por la que no viene instalado por defecto en Debian es simplemente que es una dependencia adicional no esencial para el sistema base.
btop va un paso más allá en visualización: muestra gráficas de uso de CPU por núcleo, red, y disco en tiempo real con una interfaz casi gráfica en el terminal. Para un servidor sin entorno gráfico donde quieres un panel de estado rápido, es muy práctico.
N° 61