Listando procesos del sistema en GNU/Linux

Un proceso es una instancia de un programa en ejecución. Un sistema operativo corriendo, las aplicaciones que nosotros ejecutamos, cada comando, cada servicio, el entorno de escritorio o gestor de ventanas… todos son procesos corriendo en un procesador.

Los procesos son la parte “viva” del sistema operativo, son el componente que le da vida nuestra computadora, y resuelven nuestras tareas.

Veremos en el artículo de hoy algunos comando interesantes para administrar y conocer los procesos que están corriendo en nuestra computadora, particularmente, en nuestro sistema GNU/Linux 🙂

Listando los procesos

Para listar los procesos del sistema uno de los comandos más útiles es el comando “ps”.
ps muestra el listado de procesos que están corriendo o ejecutándose en el momento de lanzar el comando.
Veamos un ejemplo:

El comando ps muestra por defecto los procesos pertenecientes a la terminal de usuario que lo ejecuta, por lo que solo se suelen ver unos pocos. En el ejemplo, solo el proceso bash, nuestro intérprete de comandos, y el propio proceso ps en ejecución.

Con el modificador “a” podremos ver los procesos sin restricciones de usuario, incluidos los procesos del sistema.

Otro modificador interesante, es “u”, que nos mostrará el usuario que está ejecutando cada proceso.
Veamos los procesos de nuestro usuario actual, con información adicional relativa a consumo de memoria RAM, virtual, tiempo de procesamiento, etc.

Complementémoslo con la salida anterior de esta forma para ver los procesos del sistema y el usuario responsable de cada uno:

Además, podremos ver procesos que no están corriendo en ninguna terminal (ni tty ni pseudo-terminal pts) utilizando el modificador “x”. Aquí veremos algunos procesos o daemons del sistema operativo:

Listando el árbol de procesos

En algún otro artículo hablaremos sobre la generación de procesos por clonación o “fork”, y veremos que los procesos se relacionan entre sí en una estructura de árbol, donde poseemos procesos “padre” y procesos “hijo”, donde el proceso hijo es un proceso independiente generado a partir de otro proceso. Por ejemplo, cuando corremos un comando en la terminal, concretamente en un intérprete de comandos como bash, el comando genera un proceso que es automáticamente un “hijo” de nuestro intérprete.

Esta relación podemos verla de dos formas.

Una es utilizando el modificador “f” en el comando ps de esta forma:

Aquí se puede apreciar en la última línea el propio comando “ps f” como proceso hijo del bash en el que lo estoy ejecutando.

La otra es utilizando el comando “pstree”, que puede instalarse desde el gestor de paquetes de casi cualquier distribución. Por ejemplo en Debian y derivados:

Su salida será algo similar a esta:

Como se habrá observado en las salidas del comando “ps”, todos los procesos se identifican con un número llamado “process Id”, o PID. En el comando pstree podemos ver también los PID’s de los procesos usando el modificador “-p” de esta forma:

Cabe aclarar además que los modificadores de todos estos comandos pueden combinarse para obtener salidas más acordes a las necesidades. Por ejemplo, un comando que yo suelo utilizar mucho para listar mis procesos independientemente de la terminal en la que corren, independientemente del usuario que los corre, y teniendo en cuenta las relaciones de padre-hijo, es “ps fax”.

Listando procesos en tiempo real.

Podremos ver los procesos del equipo en tiempo real, sus consumos de CPU y memoria, los consumos de swap, etc, utilizando herramientas de gestión de procesos como top, o su versión mejorada, htop.

Top suele venir instalado con las distribuciones, htop deberemos, por lo general instalarlo con algun gestor de paquetes, o compilando desde los fuentes.

Veamos un par de capturas:

El comando top:

top procesos

El comando htop:

htop procesos

Ambos programas nos permitirán ver interesante información sobre consumo de recursos del equipo en cuando a procesamiento, uptime, consumo de memoria virtual, buffers de disco, consumo de memoria swap de intercambio, total de tareas en ejecución, etc.

Y por si fuese poco, también nos permitirán administrar dichos procesos, cambiar sus prioridades, “matar” procesos, configurar la salida, ver las relaciones de padre-hijo en el arbol de procesos, etc.

Muchas de estas tareas las comentaremos en un post específico sobre administración de procesos, y el uso de top/htop, kill, killall, nice, renice, etc para llevar a cabo estos objetivos.

Esperamos que les sea de utilidad!