Escanear procesos en Linux es una de las habilidades más útiles para administrar un sistema, identificar qué se está ejecutando, cuánta memoria consume cada programa y qué prioridad tiene cada tarea. Aquí verás cómo hacerlo con comandos como ps, pidof, lsof, top y htop, todos disponibles en cualquier distribución basada en Ubuntu.
Los procesos son referencias a programas o utilidades que se están ejecutando dentro del sistema. Cada uno tiene un process ID (PID), un dueño y una prioridad que determina cómo el kernel los trata.
¿Cómo listar procesos con el comando ps en Linux?
El comando ps muestra los procesos activos en tu sesión actual. Al ejecutarlo solo, verás únicamente lo que corre en tu terminal: por ejemplo, bash y el propio ps [02:08].
La información que entrega incluye:
- PID: identificador único que Linux asigna a cada proceso.
- TTY: terminal desde la que se ejecuta.
- TIME: tiempo de ejecución.
- CMD: comando que originó el proceso.
Para ver todos los procesos del sistema, agrega las banderas -aux. Como la salida suele ser larga, conviene combinarla con grep para filtrar por usuario o por programa, por ejemplo ps -aux | grep less.
¿Qué es un PID en Linux? Es el número único que el kernel asigna a cada proceso al crearlo. Sirve para identificarlo, gestionarlo, pausarlo o terminarlo.
¿Cómo encontrar el PID de un programa específico?
Cuando ya sabes qué programa buscas, el comando pidof es más directo que ps. Si ejecutas pidof less, obtienes solo el PID (o los PIDs) de los procesos que están corriendo esa utilidad [05:18]. En el ejemplo de la clase, el resultado fue 1293, correspondiente a less espera.txt dejado en escucha desde otra sesión SSH.
¿Cómo buscar procesos por puerto con lsof?
En servidores, muchas veces necesitas saber qué proceso está usando un puerto específico. Para eso existe lsof, que lista los archivos abiertos, incluidos los sockets de red.
La sintaxis útil es lsof -i :22, donde 22 es el puerto de SSH. Si lo ejecutas como usuario normal y el dueño del proceso es root, no verás nada. Por eso necesitas anteponer sudo:
bash
sudo lsof -i :22
El resultado muestra el demonio de SSH, su PID y las conexiones establecidas. Si matas el proceso correspondiente a una sesión remota, esa conexión se cierra inmediatamente [07:35].
¿Para qué sirve lsof en Linux? Lista los archivos abiertos por procesos, incluyendo sockets de red. Con la bandera -i filtras conexiones y puertos activos.
¿Qué diferencia hay entre top y htop para monitorear procesos?
El comando top muestra en tiempo real todos los procesos que corren en tu sistema, actualizándose segundo a segundo. Entrega columnas como PID, USER, PR (priority), NI (niceness), uso de CPU y memoria [09:00].
La diferencia entre priority y niceness es clave:
- Priority (PR): valor que el kernel asigna al proceso. Los valores negativos suelen indicar procesos en tiempo real.
- Niceness (NI): prioridad que tú, como usuario, le das al proceso. Va de -20 a 19. Mientras más bajo el valor, mayor la prioridad.
htop es la versión mejorada de top. Mantiene la misma interfaz pero añade barras visuales de CPU, memoria y swap, además de navegación con teclas funcionales: F3 para buscar, F5 para vista de árbol, F7 y F8 para modificar el niceness, F10 para salir.
¿Cómo cambiar la prioridad de un proceso con niceness?
Dentro de htop, busca el proceso con F3, escribe su nombre (por ejemplo less) y usa F8 para subir el niceness (bajar prioridad) o F7 para bajarlo (subir prioridad).
Hay un detalle importante: solo puedes bajar el valor de niceness siendo usuario administrador. Por eso, si quieres priorizar un proceso, debes ejecutar sudo htop [13:10]. También existe el comando nice para hacerlo desde la línea de comandos.
¿Por qué todos los procesos en Linux dependen del proceso init?
Al presionar F5 en htop, los procesos se muestran en forma de árbol. Y aquí viene lo interesante: ningún proceso nace de la nada. Todos descienden del proceso init, que tiene el PID 1 y es el primero que se inicia en cualquier sistema Linux [11:42].
Los procesos se crean mediante un fork, es decir, una clonación del proceso padre. Por ejemplo:
init hace un fork para crear el demonio SSH.
- SSH hace otro fork al establecer una conexión remota.
- Esa conexión lanza una terminal con
bash.
- Desde
bash ejecutas htop, que también es un hijo del proceso anterior.
Esta jerarquía explica por qué cerrar un proceso padre afecta a todos sus hijos. Si terminas el demonio SSH, todas las sesiones remotas conectadas se caen.
¿Qué es el proceso init en Linux? Es el primer proceso que arranca el sistema, con PID 1. Todos los demás procesos son descendientes suyos a través de operaciones de fork.
Habilidades y comandos clave para gestionar procesos
Dominar el escaneo de procesos te prepara para administrar servidores, depurar aplicaciones y optimizar recursos. Los comandos esenciales son:
ps -aux: listado completo de procesos del sistema.
grep: filtra resultados por palabra clave.
pidof: devuelve el PID de un programa por nombre.
lsof -i :puerto: muestra qué proceso usa un puerto.
top y htop: monitoreo interactivo en tiempo real.
nice: modifica la prioridad de un proceso.
El PID es el dato fundamental para iniciar, parar, reiniciar o matar procesos, algo que verás aplicado en la siguiente clase. ¿Ya identificaste qué procesos consumen más recursos en tu máquina? Cuéntame en los comentarios cuál fue la sorpresa al ejecutar htop por primera vez.