El comando ps en Linux: listar procesos en ejecución
En los sistemas operativos tipo Unix, especialmente Linux, administrar y monitorizar los procesos en ejecución es una tarea fundamental para cualquier administrador de sistemas o desarrollador. El comando ps (process status) permite obtener una instantánea de los procesos activos, mostrando información como el identificador de proceso (PID), el usuario propietario, el consumo de CPU y memoria, y el comando que los inició. A diferencia de herramientas interactivas como top o htop, ps es no interactiva y se puede usar en scripts, tuberías y combinaciones con otros comandos para filtrar, formatear y analizar el estado del sistema de manera rápida y eficiente.
¿Qué es ps?
El nombre ps proviene de «process status». Su función principal es leer la tabla de procesos del kernel y presentar los datos en un formato legible. Dependiendo de las opciones que se le proporcionen, puede mostrar desde un resumen básico hasta un detalle exhaustivo de cada hilo y de los recursos asociados. Es una de las utilidades más antiguas de los sistemas Unix y sigue siendo relevante gracias a su simplicidad y potencia.
Sintaxis básica
La forma más simple de invocar ps es sin argumentos, lo que muestra los procesos asociados a la terminal actual:
ps
Para obtener una visión más amplia, se suelen añadir opciones que modifican el comportamiento de salida. Las opciones pueden combinarse sin necesidad de guiones adicionales, aunque también es posible usar la sintaxis estilo GNU con doble guion.
Opciones más usadas
-a: muestra todos los procesos con terminal asociada, excepto los líderes de sesión y los procesos no asociados a una terminal.-u: presenta el output en formato orientado al usuario, incluyendo el nombre de usuario, el porcentaje de CPU y memoria, y el tiempo de ejecución.-x: incluye procesos que no tienen una terminal controladora, útil para ver demonios y procesos en segundo plano.-e(o-A): lista todos los procesos del sistema, sin filtrar por terminal.-f: genera un formato completo que muestra la relación padre‑hijo (PPID), el tiempo de inicio y el comando completo con sus argumentos.-l: formato largo, con más campos como la prioridad (PRI), el número de nice (NI) y el tamaño residente de memoria (RSS).
Ejemplos prácticos
ps aux: combina-a,-uy-xpara ver todos los procesos del sistema en formato orientado al usuario; es uno de los comandos más frecuentes para diagnóstico.ps -ef: equivalente aps -e -f, muestra todos los procesos con formato completo, ideal para ver relaciones PPID.ps -L -p 1234: lista todos los hilos (lightweight processes) del proceso con PID 1234.ps -eo pid,ppid,user,%cpu,%mem,comm --sort=-%cpu: muestra un subconjunto de columnas ordenadas por consumo de CPU descendente.
Filtrado y sorting
Además de las opciones estándar, ps permite filtrar resultados mediante la selección de procesos por PID, nombre de comando, usuario o cualquier otro campo. Por ejemplo:
ps -C httpd: muestra solo los procesos cuyo nombre exacto eshttpd.ps -u www-data: lista todos los procesos ejecutados por el usuariowww-data.ps -p 1,2,3: muestra los procesos con los PID especificados.
Para ordenar la salida, se usa la opción --sort seguida del campo y opcionalmente un signo - para orden descendente o + para ascendente. Campos comunes para ordenar incluyen %cpu, %mem, pid y start_time.
Formato de salida personalizado
Cuando el formato predeterminado no se ajusta a nuestras necesidades, podemos definir nuestras propias columnas usando la opción -o (o --format). Cada campo se especifica por su nombre corto, como pid, ppid, user, %cpu, %mem, vsz, rss, tty, stat, start, time y comm. Un ejemplo típico es:
ps -eo pid,user,%cpu,%mem,comm,args --sort=-%cpu | head -10
Este comando muestra los diez procesos que más consumen CPU, incluyendo el comando completo y sus argumentos.
Combinar ps con otras herramientas
La verdadera potencia de ps se revela cuando se usa en combinación con otras utilidades de línea de comandos mediante tuberías. Algunos patrones habituales son:
ps aux | grep apache: filtra la lista para mostrar solo los procesos que contienen la palabra «apache».ps -eo pid,ppid,user,comm | sort -k3 -n: ordena la salida por nombre de usuario usandosort.ps -eo pid,etime | awk '$2 > "00:10:00" {print $1}': identifica procesos que han estado ejecutándose más de diez minutos.
Estas combinaciones permiten crear monitores personalizados, alertas y reportes de consumo de recursos.
Consejos y buenas prácticas
- Siempre especifique el formato de salida con
-ocuando vaya a procesar la información en un script; así evita sorpresas si el formato predeterminado cambia entre versiones. - Use
--no-headerssi necesita eliminar la fila de encabezado para facilitar el procesamiento conawkocut. - Recuerde que algunas opciones son específicas de la implementación (BSD vs GNU). En la mayoría de distribuciones Linux modernas predomina la variante GNU, pero es útil consultar
man pspara confirmar la sintaxis exacta. - Para monitorización continua, considere usar
watchjunto aps(por ejemplo,watch -n 5 'ps -eo pid,user,%cpu,%mem,comm --sort=-%cpu | head -5') para obtener una vista actualizada cada pocos segundos.
Conclusión
El comando ps es una herramienta esencial para cualquier persona que trabaje con Linux. Su capacidad para listar, filtrar y formatear información sobre los procesos en ejecución lo hace indispensable tanto para la solución de problemas como para la optimización del rendimiento del sistema. Dominar sus opciones y saber combinarlo con otras utilidades de la terminal le permitirá obtener información precisa y oportuna sobre el estado de su máquina, mejorando así su eficiencia como administrador o desarrollador.


