ps
nervt so. Glücklicherweise gibt es pgrep
, die ähnliche Auswahloptionen hat, aber erfordert, dass sie alle übereinstimmen, und gibt dann die übereinstimmenden PIDs aus. Standardmäßig gibt es einen pro Zeile aus, aber es kann verlangt werden, ein anderes Trennzeichen zu verwenden, damit es mit ps
funktioniert :
ps -f -p"$(pgrep -d, -u $USER -P 1)"
Leider ps
kann nur abwählen, es scheint auch kein and
zu geben Operator oder die Möglichkeit, Verfeinerungen hinzuzufügen.
Sie können die Hilfe von pgrep
in Anspruch nehmen um eine Liste von PIDs zu erhalten und diese an ps
weiterzugeben jedoch. Zum Beispiel:
$ 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
hat keine sehr flexiblen Filter. Lassen Sie mehr anzeigen, als Sie benötigen, geben Sie das Format explizit an und filtern Sie die Ausgabe. Awk wird für diese Aufgabe oft gut funktionieren.
ps -o pid= -o ppid= -o user= -o comm= -o args= |
awk -v uid="$(id -un myuser)" '$2 == 1 && $3 == uid'
Die Gleichheitszeichen hinter den Spaltennamen unterdrücken die Kopfzeile. Wenn Sie die Kopfzeilen sehen möchten, lassen Sie den Filter die erste Zeile unverändert ausgeben:
ps -o pid -o ppid -o user -o comm -o args |
awk -v uid="$(id -un myuser)" 'NR == 1 || ($2 == 1 && $3 == uid)'
Wenn Sie eine automatisierte Verarbeitung durchführen möchten, müssen Sie die Daten nur auf die PIDs reduzieren.
ps -o pid= -o ppid= -o user= |
awk -v uid="$(id -un myuser)" '$2 == 1 && $3 == uid {print $1}'