ps
menjengkelkan seperti itu. Untungnya, ada pgrep
, yang memiliki opsi pemilihan serupa, tetapi mengharuskan semuanya cocok dan kemudian menampilkan pid yang cocok. Secara default menghasilkan satu per baris, tetapi dapat diminta untuk menggunakan pembatas yang berbeda sehingga akan bekerja dengan ps
:
ps -f -p"$(pgrep -d, -u $USER -P 1)"
Sayangnya ps
hanya dapat membatalkan pilihan, sepertinya tidak ada and
operator atau kemampuan untuk menambahkan penyempurnaan.
Anda dapat meminta bantuan pgrep
untuk mendapatkan daftar PID dan memasukkannya ke ps
namun. Misalnya:
$ 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
tidak memiliki filter yang sangat fleksibel. Jadikan itu menampilkan lebih dari yang Anda butuhkan, tentukan formatnya secara eksplisit, dan filter hasilnya. Awk akan sering bekerja dengan baik untuk tugas ini.
ps -o pid= -o ppid= -o user= -o comm= -o args= |
awk -v uid="$(id -un myuser)" '$2 == 1 && $3 == uid'
Tanda sama dengan setelah nama kolom menekan baris header. Jika Anda ingin melihat baris tajuk, buat filter mencetak baris pertama tidak berubah:
ps -o pid -o ppid -o user -o comm -o args |
awk -v uid="$(id -un myuser)" 'NR == 1 || ($2 == 1 && $3 == uid)'
Jika Anda ingin melakukan beberapa pemrosesan otomatis, Anda harus menghapus data menjadi PID saja.
ps -o pid= -o ppid= -o user= |
awk -v uid="$(id -un myuser)" '$2 == 1 && $3 == uid {print $1}'