Listando procesos del sistema en GNU/Linux
Demos un vistazo a la lista de procesos del sistema, y conozcamos algunas herramientas fundamentales de todo sysadmin.
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:
die@tuta2:~$ ps
PID TTY TIME CMD
3609 pts/1 00:00:00 bash
5135 pts/1 00:00:00 ps
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.
die@tuta2:~$ ps a
PID TTY STAT TIME COMMAND
3394 tty1 Ss 0:00 /bin/login --
3395 tty2 Ss+ 0:00 /sbin/getty 38400 tty2
3474 tty1 S+ 0:00 -bash
3536 tty1 S+ 0:00 xinit /home/die/.xinitrc -- /etc/X11/xinit/xserver
3537 tty3 Ss+ 4:26 /usr/bin/X -nolisten tcp :0 -auth /tmp/serverauth.
3545 tty1 Sl 0:00 /usr/bin/lxsession -s LXDE -e LXDE
3553 tty1 S 0:00 dbus-launch --sh-syntax --exit-with-session
3564 tty1 S 0:03 openbox --config-file /home/die/.config/openbox/lx
3566 tty1 Sl 0:08 lxpanel --profile LXDE
3567 tty1 Sl 0:00 pcmanfm --desktop --profile LXDE
3568 tty1 S 0:00 xscreensaver -no-splash
3574 tty1 Sl 0:01 /usr/bin/python /usr/share/system-config-printer/a
3576 tty1 Sl 0:00 /usr/lib/i386-linux-gnu/libmenu-cache1/libexec/men
[...]
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.
die@tuta2:~$ ps u
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
die 3474 0.0 0.1 5808 2556 tty1 S+ 16:17 0:00 -bash
die 3536 0.0 0.0 3612 744 tty1 S+ 16:17 0:00 xinit /home/
die 3545 0.0 0.2 48852 5056 tty1 Sl 16:17 0:00 /usr/bin/lxs
die 3553 0.0 0.0 3864 584 tty1 S 16:17 0:00 dbus-launch
die 3564 0.0 0.4 17624 8764 tty1 S 16:17 0:03 openbox --co
die 3566 0.1 0.7 268384 15804 tty1 Sl 16:17 0:08 lxpanel --pr
die 3567 0.0 0.5 213316 11636 tty1 Sl 16:17 0:00 pcmanfm --de
die 3568 0.0 0.1 7056 2456 tty1 S 16:17 0:00 xscreensaver
die 3574 0.0 0.5 34372 11528 tty1 Sl 16:17 0:01 /usr/bin/pyt
die 3576 0.0 0.1 18528 3008 tty1 Sl 16:17 0:00 /usr/lib/i38
die 3582 0.6 6.0 450692 124464 tty1 Sl 16:17 0:42 claws-mail
die 3589 0.5 1.9 261764 40328 tty1 Sl 16:17 0:34 pidgin
[...]
Complementémoslo con la salida anterior de esta forma para ver los procesos del sistema y el usuario responsable de cada uno:
die@tuta2:~$ ps au
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 3394 0.0 0.0 4256 2060 tty1 Ss 16:17 0:00 /bin/login -
root 3395 0.0 0.0 4188 872 tty2 Ss+ 16:17 0:00 /sbin/getty
die 3474 0.0 0.1 5808 2556 tty1 S+ 16:17 0:00 -bash
die 3536 0.0 0.0 3612 744 tty1 S+ 16:17 0:00 xinit /home/
root 3537 4.2 5.6 150396 118056 tty3 Ss+ 16:17 4:29 /usr/bin/X -
die 3545 0.0 0.2 48852 5056 tty1 Sl 16:17 0:00 /usr/bin/lxs
die 3553 0.0 0.0 3864 584 tty1 S 16:17 0:00 dbus-launch
die 3564 0.0 0.4 17624 8764 tty1 S 16:17 0:03 openbox --co
die 3566 0.1 0.7 268384 15804 tty1 Sl 16:17 0:08 lxpanel --pr
die 3567 0.0 0.5 213316 11636 tty1 Sl 16:17 0:00 pcmanfm --de
die 3568 0.0 0.1 7056 2456 tty1 S 16:17 0:00 xscreensaver
[...]
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:
die@tuta2:~$ ps x
PID TTY STAT TIME COMMAND
3474 tty1 S+ 0:00 -bash
3536 tty1 S+ 0:00 xinit /home/die/.xinitrc -- /etc/X11/xinit/xserver
3545 tty1 Sl 0:00 /usr/bin/lxsession -s LXDE -e LXDE
3553 tty1 S 0:00 dbus-launch --sh-syntax --exit-with-session
3554 ? Ss 0:01 /usr/bin/dbus-daemon --fork --print-pid 5 --print-
3557 ? Sl 0:00 /usr/lib/gvfs/gvfsd
3564 tty1 S 0:03 openbox --config-file /home/die/.config/openbox/lx
3566 tty1 Sl 0:08 lxpanel --profile LXDE
3567 tty1 Sl 0:00 pcmanfm --desktop --profile LXDE
3568 tty1 S 0:00 xscreensaver -no-splash
3574 tty1 Sl 0:01 /usr/bin/python /usr/share/system-config-printer/a
3576 tty1 Sl 0:00 /usr/lib/i386-linux-gnu/libmenu-cache1/libexec/men
3582 tty1 Sl 0:43 claws-mail
3589 tty1 Sl 0:35 pidgin
3591 tty1 Sl 1:14 pumpa
3593 tty1 Sl 0:00 tilda
3596 ? S<l 0:00 /usr/bin/pulseaudio --start
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:
die@tuta2:~$ ps f
PID TTY STAT TIME COMMAND
3474 tty1 S+ 0:00 -bash
3536 tty1 S+ 0:00 _ xinit /home/die/.xinitrc -- /etc/X11/xinit/xse
3545 tty1 Sl 0:00 _ /usr/bin/lxsession -s LXDE -e LXDE
3564 tty1 S 0:03 _ openbox --config-file /home/die/.confi
3566 tty1 Sl 0:08 _ lxpanel --profile LXDE
3567 tty1 Sl 0:00 _ pcmanfm --desktop --profile LXDE
3568 tty1 S 0:00 _ xscreensaver -no-splash
3604 tty1 S 0:00 lxclipboard
3593 tty1 Sl 0:01 tilda
3608 tty1 S 0:00 _ gnome-pty-helper
3609 pts/1 Ss 0:00 _ /bin/bash
5317 pts/1 R+ 0:00 _ ps f
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:
apt-get install pstree
Su salida será algo similar a esta:
die@tuta2:~$ pstree
init─┬─acpid
├─cupsd
├─2*[dbus-daemon]
├─dbus-launch
├─dropbox───20*[{dropbox}]
├─firefox───39*[{firefox}]
├─getty
├─gvfs-mtp-volume───{gvfs-mtp-volume}
├─gvfs-udisks2-vo───{gvfs-udisks2-vo}
├─gvfsd───{gvfsd}
├─gvfsd-dnssd───3*[{gvfsd-dnssd}]
├─gvfsd-metadata───{gvfsd-metadata}
├─gvfsd-network───4*[{gvfsd-network}]
├─gvfsd-trash───3*[{gvfsd-trash}]
├─2*[leafpad───leafpad1───{leafpad1}]
├─login───bash───xinit─┬─Xorg
│ └─lxsession─┬─lxpanel───2*[{lxpanel}]
│ ├─openbox
│ └─2*[{lxsession}]
├─saned───saned
├─scanlogd
├─snmpd
├─sshd
├─thunar───2*[{thunar}]
├─tilda─┬─bash───pstree
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:
die@tuta2:~$ pstree -p
init(1)─┬─acpid(2540)
├─applet.py(3574)───{applet.py}(3677)
├─at-spi-bus-laun(3824)─┬─{at-spi-bus-laun}(3825)
│ └─{at-spi-bus-laun}(3827)
├─atd(2517)
├─avahi-daemon(2761)───avahi-daemon(2762)
├─bluetoothd(2791)
├─claws-mail(3582)─┬─{claws-mail}(3709)
│ ├─{claws-mail}(3775)
│ ├─{claws-mail}(3795)
│ ├─{claws-mail}(3796)
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 algún gestor de paquetes, o compilando desde los fuentes.
Veamos un par de capturas:
El comando top:
El comando htop:
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 árbol 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!