ps
es molesto de esa manera. Afortunadamente, hay pgrep
, que tiene opciones de selección similares, pero requiere que todas coincidan y luego genera los pid coincidentes. De forma predeterminada, genera uno por línea, pero se le puede pedir que use un delimitador diferente para que funcione con ps
:
ps -f -p"$(pgrep -d, -u $USER -P 1)"
Desafortunadamente ps
solo puede anular la selección, no parece haber un and
operador o la capacidad de agregar refinamientos.
Puede solicitar la ayuda de pgrep
para obtener una lista de PID y enviarla a ps
sin embargo. Por ejemplo:
$ ps -f $(pgrep -P 1 -u saml)
UID PID PPID C STIME TTY STAT TIME CMD
saml 1986 1 0 Jul25 ? SLl 0:00 /usr/bin/gnome-keyring-daemon --daemonize --login
saml 2003 1 0 Jul25 ? S 0:00 dbus-launch --sh-syntax --exit-with-session
saml 2004 1 0 Jul25 ? Ss 0:23 /bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session
saml 2147 1 0 Jul25 ? S 0:04 /usr/libexec/gconfd-2
saml 2156 1 0 Jul25 ? Ssl 0:09 /usr/libexec/gnome-settings-daemon
saml 2162 1 0 Jul25 ? S 0:00 /usr/libexec/gvfsd
saml 2178 1 0 Jul25 ? Ssl 0:01 /usr/bin/pulseaudio --start --log-target=syslog
saml 2180 1 0 Jul25 ? Ssl 0:04 /usr/libexec//gvfs-fuse-daemon /home/saml/.gvfs
saml 2191 1 0 Jul25 ? S 0:12 syndaemon -i 0.5 -k
saml 2193 1 0 Jul25 ? S 0:00 /usr/libexec/gvfs-gdu-volume-monitor
ps
no tiene filtros muy flexibles. Haz que muestre más de lo que necesitas, especifica el formato explícitamente y filtra la salida. Awk a menudo funcionará bien para esta tarea.
ps -o pid= -o ppid= -o user= -o comm= -o args= |
awk -v uid="$(id -un myuser)" '$2 == 1 && $3 == uid'
Los signos de igual después de los nombres de las columnas suprimen la línea de encabezado. Si desea ver las líneas de encabezado, haga que el filtro imprima la primera línea sin cambios:
ps -o pid -o ppid -o user -o comm -o args |
awk -v uid="$(id -un myuser)" 'NR == 1 || ($2 == 1 && $3 == uid)'
Si desea realizar un procesamiento automatizado, deberá reducir los datos solo a los PID.
ps -o pid= -o ppid= -o user= |
awk -v uid="$(id -un myuser)" '$2 == 1 && $3 == uid {print $1}'