GNU/Linux >> Znalost Linux >  >> Linux

Existuje způsob, jak vybrat podle několika podmínek v `ps`?

ps takhle je to otravné. Naštěstí existuje pgrep , který má podobné možnosti výběru, ale vyžaduje, aby se všechny shodovaly, a poté vypíše odpovídající pid. Ve výchozím nastavení vypisuje jeden na řádek, ale může být požádán o použití jiného oddělovače, aby fungoval s ps :

ps -f -p"$(pgrep -d, -u $USER -P 1)"

Bohužel ps lze pouze zrušit výběr, nezdá se, že by tam byl ani and operátor nebo možnost přidávat upřesnění.

Můžete požádat o pomoc pgrep získat seznam PID a přidat je do ps nicméně. Například:

$ 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 nemá příliš flexibilní filtry. Nechte jej zobrazovat více, než potřebujete, určete explicitně formát a filtrujte výstup. Awk bude pro tento úkol často fungovat dobře.

ps -o pid= -o ppid= -o user= -o comm= -o args= |
awk -v uid="$(id -un myuser)" '$2 == 1 && $3 == uid'

Rovnítka za názvy sloupců potlačují řádek záhlaví. Pokud chcete vidět řádky záhlaví, nechte filtr vytisknout první řádek beze změny:

ps -o pid -o ppid -o user -o comm -o args |
awk -v uid="$(id -un myuser)" 'NR == 1 || ($2 == 1 && $3 == uid)'

Pokud chcete provést nějaké automatizované zpracování, budete muset data stáhnout pouze na PID.

ps -o pid= -o ppid= -o user= |
awk -v uid="$(id -un myuser)" '$2 == 1 && $3 == uid {print $1}'

Linux
  1. Existuje způsob, jak přimět gcc k výstupu surového binárního kódu?

  2. Existuje způsob, jak převést z UTF8 na ISO-8859-1?

  3. Existuje způsob, jak oříznout soubor NETCDF?

  1. Existuje způsob, jak restartovat špatné bloky?

  2. Existuje způsob, jak vypsat informace CPUID CPU?

  3. Existuje způsob, jak monitorovat /dev/random?

  1. Dhcpd:Jak zkontrolovat stav fondu Dhcp?

  2. Existuje způsob, jak „uniq“ podle sloupce?

  3. Existuje způsob, jak zkontrolovat aktuální rpath v Linuxu?