En este artículo voy a explicar la forma correcta para listar todos los procesos pertenecientes a un usuario específico, junto con algunas características interesantes de la herramienta ps.

En todo sistema operativo multiusuario, es común que existan procesos pertenecientes a diferentes usuarios en un determinado momento:

root@devuan:/home/emi# ps --no-headers -A -o user | sort | uniq
avahi
daemon
Debian-exim
emi
messagebus
ntp
root
rtkit
statd

Justamente la principal característica de un sistema operativo multiusuario (todos los sistemas operativos modernos) consiste en permitir la ejecución de procesos de diferentes usuarios al mismo tiempo.

Supongamos entonces que deseamos listar absolutamente todos los procesos a nombre de un determinado usuario. Por instinto, costumbre o simplicidad, tal vez se intente utilizar algún filtrado con grep sobre la salida de ps aux o ps -ef:

root@devuan:/home/emi# ps aux | grep "^emi"
emi       2286  0.0  1.5  51812 16160 ?        Sl   08:54   0:00 /usr/bin/lxsession -s LXDE -e LXDE
emi       2322  0.0  0.2   4724  2472 ?        S    08:54   0:00 /usr/bin/dbus-launch --exit-with-session --sh-syntax
emi       2323  0.0  0.2   4336  2240 ?        Ss   08:54   0:00 /usr/bin/dbus-daemon --fork --print-pid 6 --print-address 8 --session
emi       2357  0.0  0.0  15880   276 ?        S    08:54   0:00 /usr/bin/VBoxClient --clipboard
emi       2359  0.0  0.4  17580  4240 ?        Sl   08:54   0:00 /usr/bin/VBoxClient --clipboard
emi       2368  0.0  0.0  15880   276 ?        S    08:54   0:00 /usr/bin/VBoxClient --display
emi       2370  0.0  0.2  15880  2940 ?        S    08:54   0:00 /usr/bin/VBoxClient --display
emi       2375  0.0  0.0  15880   280 ?        S    08:54   0:00 /usr/bin/VBoxClient --seamless
emi       2376  0.0  0.2  17564  2272 ?        Sl   08:54   0:00 /usr/bin/VBoxClient --seamless
emi       2386  0.0  0.0  15880   276 ?        S    08:54   0:00 /usr/bin/VBoxClient --draganddrop
emi       2387  0.0  0.2  18080  2396 ?        Sl   08:54   0:02 /usr/bin/VBoxClient --draganddrop
emi       2388  0.0  0.0   4728   212 ?        Ss   08:54   0:00 /usr/bin/ssh-agent x-session-manager
emi       2396  0.0  0.5  44228  5892 ?        Sl   08:54   0:00 /usr/lib/at-spi2-core/at-spi-bus-launcher
emi       2401  0.0  0.2   4336  3000 ?        S    08:54   0:00 /usr/bin/dbus-daemon --config-file=/usr/share/defaults/at-spi2/accessibility.conf --nofork --print-address 3
emi       2403  0.0  0.5  28584  5676 ?        Sl   08:54   0:00 /usr/lib/at-spi2-core/at-spi2-registryd --use-gnome-session
emi       2410  0.0  1.5  56004 16172 ?        S    08:54   0:00 openbox --config-file /home/emi/.config/openbox/lxde-rc.xml
emi       2414  0.0  1.2  44124 13044 ?        Sl   08:54   0:00 lxpolkit
emi       2415  0.0  2.5 104012 26516 ?        Sl   08:54   0:00 lxpanel --profile LXDE
emi       2419  0.0  2.8 132616 29360 ?        Sl   08:54   0:02 pcmanfm --desktop --profile LXDE
emi       2420  0.0  0.4   7924  5064 ?        S    08:54   0:00 xscreensaver -no-splash
emi       2424  0.0  0.0   4728   212 ?        Ss   08:54   0:00 /usr/bin/ssh-agent -s
emi       2427  0.0  2.9  45108 30088 ?        S    08:54   0:00 /usr/bin/python -O /usr/share/wicd/gtk/wicd-client.py --tray
emi       2433  0.0  2.3  45272 24176 ?        Sl   08:54   0:01 /usr/bin/python3 /usr/share/system-config-printer/applet.py
emi       2444  0.0  0.4  16736  4288 ?        Ssl  08:54   0:00 /usr/lib/menu-cache/menu-cached /run/user/1001/menu-cached-:0
emi       2456  0.0  2.2  87688 22776 ?        Sl   08:54   0:02 clipit
emi       2460  0.0  0.9 102240 10004 ?        S<l  08:54   0:01 /usr/bin/pulseaudio --start --log-target=syslog
emi       2530  0.0  2.0  40244 21580 ?        Sl   08:55   0:00 lxterminal
emi       2531  0.0  0.1   2516  1696 ?        S    08:55   0:00 gnome-pty-helper
emi       2532  0.0  0.4   6776  4552 pts/0    Ss   08:55   0:00 bash
emi       2654  0.0  0.4  12324  4196 ?        S    09:02   0:00 sshd: emi@pts/1
emi       2655  0.0  0.4   6792  4512 pts/1    Ss   09:02   0:00 -bash
emi       3622 23.5  0.4   7560  4684 ?        RN   09:52   0:06 fiberlamp -root

Sin embargo, recurrir al filtrado de una salida no es la solución más robusta cuando se desea utilizar esta información dentro de un script (por ejemplo se desea realizar determinada acción sobre cada PID recuperado pasado como parámetro). Por otro lado, ps incluye opciones para listar sólo los procesos pertenecientes a un ID o nombre de usuario real (-U) y efectivo (-u).

Por ejemplo, si deseamos listar sólo procesos pertenecientes al usuario "emi":

root@devuan:/home/emi# ps -U emi -u emi 
  PID TTY          TIME CMD
 2286 ?        00:00:00 lxsession
 2322 ?        00:00:00 dbus-launch
 2323 ?        00:00:00 dbus-daemon
 2357 ?        00:00:00 VBoxClient
 2359 ?        00:00:00 VBoxClient
 2368 ?        00:00:00 VBoxClient
 2370 ?        00:00:00 VBoxClient
 2375 ?        00:00:00 VBoxClient
 2376 ?        00:00:00 VBoxClient
 2386 ?        00:00:00 VBoxClient
 2387 ?        00:00:03 VBoxClient
 2388 ?        00:00:00 ssh-agent
 2396 ?        00:00:00 at-spi-bus-laun
 2401 ?        00:00:00 dbus-daemon
 2403 ?        00:00:00 at-spi2-registr
 2410 ?        00:00:00 openbox
 2414 ?        00:00:00 lxpolkit
 2415 ?        00:00:00 lxpanel
 2419 ?        00:00:02 pcmanfm
 2420 ?        00:00:00 xscreensaver
 2424 ?        00:00:00 ssh-agent
 2427 ?        00:00:00 wicd-client
 2433 ?        00:00:01 applet.py
 2444 ?        00:00:00 menu-cached
 2456 ?        00:00:03 clipit
 2460 ?        00:00:01 pulseaudio
 2530 ?        00:00:00 lxterminal
 2531 ?        00:00:00 gnome-pty-helpe
 2532 pts/0    00:00:00 bash
 2654 ?        00:00:00 sshd
 2655 pts/1    00:00:00 bash
 3622 ?        00:02:24 fiberlamp <defunct>
 3789 ?        00:00:01 popsquares

Si deseamos una salida idéntica a la de ps aux, especificar el siguiente formato personalizado:

root@devuan:/home/emi# ps -U emi -u emi -o pid,%cpu,%mem,vsz,rss,stat,bsdstart,bsdtime,comm
  PID %CPU %MEM    VSZ   RSS STAT  START   TIME COMMAND
 2286  0.0  1.5  51812 16160 Sl    08:54   0:00 lxsession
 2322  0.0  0.2   4724  2472 S     08:54   0:00 dbus-launch
 2323  0.0  0.2   4336  2240 Ss    08:54   0:00 dbus-daemon
 2357  0.0  0.0  15880   276 S     08:54   0:00 VBoxClient
 2359  0.0  0.4  17580  4240 Sl    08:54   0:00 VBoxClient
 2368  0.0  0.0  15880   276 S     08:54   0:00 VBoxClient
 2370  0.0  0.2  15880  2940 S     08:54   0:00 VBoxClient
 2375  0.0  0.0  15880   280 S     08:54   0:00 VBoxClient
 2376  0.0  0.2  17564  2272 Sl    08:54   0:00 VBoxClient
 2386  0.0  0.0  15880   276 S     08:54   0:00 VBoxClient
 2387  0.0  0.2  18080  2396 Sl    08:54   0:03 VBoxClient
 2388  0.0  0.0   4728   212 Ss    08:54   0:00 ssh-agent
 2396  0.0  0.5  44228  5892 Sl    08:54   0:00 at-spi-bus-laun
 2401  0.0  0.2   4336  3000 S     08:54   0:00 dbus-daemon
 2403  0.0  0.5  28584  5676 Sl    08:54   0:00 at-spi2-registr
 2410  0.0  1.5  56004 16172 S     08:54   0:00 openbox
 2414  0.0  1.2  44124 13044 Sl    08:54   0:00 lxpolkit
 2415  0.0  2.5 104012 26516 Sl    08:54   0:00 lxpanel
 2419  0.0  2.8 132616 29360 Sl    08:54   0:02 pcmanfm
 2420  0.0  0.4   7924  5064 S     08:54   0:00 xscreensaver
 2424  0.0  0.0   4728   212 Ss    08:54   0:00 ssh-agent
 2427  0.0  2.9  45108 30088 S     08:54   0:00 wicd-client
 2433  0.0  2.3  45272 24176 Sl    08:54   0:01 applet.py
 2444  0.0  0.4  16736  4288 Ssl   08:54   0:00 menu-cached
 2456  0.0  2.2  87688 22776 Sl    08:54   0:03 clipit
 2460  0.0  0.9 102240 10004 S<l   08:54   0:01 pulseaudio
 2530  0.0  2.0  40244 21580 Sl    08:55   0:00 lxterminal
 2531  0.0  0.1   2516  1696 S     08:55   0:00 gnome-pty-helpe
 2532  0.0  0.4   6776  4552 Ss    08:55   0:00 bash
 2654  0.0  0.4  12324  4196 R     09:02   0:00 sshd
 2655  0.0  0.4   6792  4512 Ss    09:02   0:00 bash
 3622 12.6  0.0      0     0 ZN    09:52   2:24 fiberlamp <defunct>
 3789  0.2  0.2   6896  2308 SN    10:02   0:01 popsquares

BTW: se observa en la salida un bonito proceso zombie (wonder why...). Por lo que veo a simple vista, hay un temita con el manejo de procesos de XScreenSaver, pero se resuelve solo al acceder a la sesión gráfica y realizar una acción que desactive el salvapantalla (evidentemente cada modo del salvapantalla está implementado por procesos diferentes y al terminar el proceso padre, desaparecen automáticamente todos los hijos, incluyendo los zombies).

Volviendo al tema del artículo...

Por otro lado, también podemos optar por una salida más compacta:

root@devuan:/home/emi# ps -U emi -u emi -o pid,comm                                        
  PID COMMAND
 2286 lxsession
 2322 dbus-launch
 2323 dbus-daemon
 2357 VBoxClient
 2359 VBoxClient
 2368 VBoxClient
 2370 VBoxClient
 2375 VBoxClient
 2376 VBoxClient
 2386 VBoxClient
 2387 VBoxClient
 2388 ssh-agent
 2396 at-spi-bus-laun
 2401 dbus-daemon
 2403 at-spi2-registr
 2410 openbox
 2414 lxpolkit
 2415 lxpanel
 2419 pcmanfm
 2420 xscreensaver
 2424 ssh-agent
 2427 wicd-client
 2433 applet.py
 2444 menu-cached
 2456 clipit
 2460 pulseaudio
 2530 lxterminal
 2531 gnome-pty-helpe
 2532 bash
 2654 sshd
 2655 bash

O incluso recuperar únicamente los PID, sin la cabecera en la salida, para pasar como argumento a otra herramienta, programa o script:

root@devuan:/home/emi# ps --no-headers -U emi -u emi -o pid | tr -d ' '
2286
2322
2323
2357
2359
2368
2370
2375
2376
2386
2387
2388
2396
2401
2403
2410
2414
2415
2419
2420
2424
2427
2433
2444
2456
2460
2530
2531
2532
2654
2655

En este caso se utiliza tr para eliminar el espacio en blanco inicial en cada línea de la salida.

Para más información, acceder a la página de manual de ps (man ps).


Tal vez pueda interesarte


Compartí este artículo