GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Gibt es eine Möglichkeit, in `ps` nach mehreren Bedingungen auszuwählen?

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}'

Linux
  1. Dhcpd:Gibt es eine Möglichkeit, den Status des DHCP-Pools zu überprüfen?

  2. Gibt es eine Möglichkeit, gcc dazu zu bringen, rohe Binärdateien auszugeben?

  3. Gibt es eine Möglichkeit, ein Cargo-Projekt umzubenennen?

  4. Gibt es eine Möglichkeit, Badblocks neu zu starten?

  5. Gibt es eine Möglichkeit, den gesamten CPU-Verbrauch zu begrenzen?

Gibt es eine Möglichkeit, ein unterbrochenes scp einer Datei fortzusetzen?

Gibt es eine Möglichkeit, Text in htop zu kopieren?

Gibt es eine Möglichkeit, Minicom-Zeilenumbruch standardmäßig zu aktivieren?

Wie lernt man SELinux am besten?

Gibt es eine Möglichkeit, den Prozess zu hören?

Gibt es eine Möglichkeit, Apache Bench (ab) zu installieren, ohne Apache zu installieren?