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

ps:Saubere Möglichkeit, nur übergeordnete Prozesse zu erhalten?

/usr/bin/pgrep -o <process_name>

wobei '-o' der älteste (am längsten gestartete) der übereinstimmenden Prozesse ist


Eine andere Lösung (von hier):

ps -ocommand= -p $PPID | awk -F/ '{print $NF}' | awk '{print $1}'

Nachdem er mit @netcoder über die Kommentare seiner Antwort diskutiert hatte, benutzte er einen netten Trick:D
Mit f am ps wird immer die Eltern an die Spitze bringen, was großartig ist.

Das sollte einfach funktionieren:

$ ps hf -opid -C <process> | awk '{ print $1; exit }'

Wie ich in den Kommentaren erwähnt habe, wird dies den pid zurückgeben von nur einem Prozess.

Ich würde mit:

gehen
ps rf -opid,cmd -C <process-name> | awk '$2 !~ /^[|\\]/ { print $1 }'

das heißt:

  • Laufende Prozesse auflisten r (oder e wenn du alles willst)
  • zusammen mit Eltern-/Kind-Diagramm f
  • gibt nur die PID und den Befehlsnamen -opid,cmd aus
  • nur für den angegebenen Prozess -C <process>

und dann

  • Wenn das 2. Feld - das ist der Befehl (-opid,cmd ) - beginnt nicht mit \ oder | dann ist es ein übergeordneter Prozess, also drucke das erste Feld - das ist die PID.

einfacher Test:

$ ps f -opid,cmd -Cchromium
  PID CMD
 2800 /usr/lib/chromium/chromium --type=zygote --enable-seccomp-sandbox
 2803  \_ /usr/lib/chromium/chromium --type=zygote --enable-seccomp-sandbox
 2899      \_ /usr/lib/chromium/chromium --type=renderer --enable-seccomp-sandbox --lang=en-US --force-fieldtrials=ConnCountImpact/conn_count_6/ConnnectB
 2906      |   \_ /usr/lib/chromium/chromium --type=renderer --enable-seccomp-sandbox --lang=en-US --force-fieldtrials=ConnCountImpact/conn_count_6/Connn
 [  ... snip ... ]
 2861      \_ /usr/lib/chromium/chromium --type=renderer --enable-seccomp-sandbox --lang=en-US --force-fieldtrials=ConnCountImpact/conn_count_6/ConnnectB
 2863          \_ /usr/lib/chromium/chromium --type=renderer --enable-seccomp-sandbox --lang=en-US --force-fieldtrials=ConnCountImpact/conn_count_6/Connn
 2794 /usr/lib/chromium/chromium --enable-seccomp-sandbox --memory-model=low --purge-memory-button --disk-cache-dir=/tmp/chromium
 2796  \_ /usr/lib/chromium/chromium --enable-seccomp-sandbox --memory-model=low --purge-memory-button --disk-cache-dir=/tmp/chromium
 3918  \_ /usr/lib/chromium/chromium --type=gpu-process --channel=2794.45.1891443837 --gpu-vendor-id=0x10de --gpu-device-id=0x0611 --gpu-driver-version -
25308  \_ [chromium] <defunct>
31932  \_ /usr/lib/chromium/chromium --type=plugin --plugin-path=/usr/lib/mozilla/plugins/libflashplayer.so --lang=en-US --channel=2794.1330.1990362572


$ ps f -opid,cmd -Cchromium | awk '$2 !~ /^[|\\]/ { print $1 }'
PID
2800
2794

$ # also supressing the header of ps (top line 'PID') -- add 'h' to ps
$ ps hf -opid,cmd -Cchromium | awk '$2 !~ /^[|\\]/ { print $1 }'
2800
2794

Linux
  1. /usr/bin vs. /usr/local/bin Unter Linux?

  2. Bash =~ Regex und Https://regex101.com/?

  3. Linux – Zusammenführen von /usr/bin und /usr/sbin in /bin (gnu/linux)?

  4. Installieren Sie Binärdateien in /bin, /sbin, /usr/bin und /usr/sbin, Interaktionen mit --prefix und DESTDIR

  5. Was ist der Unterschied zwischen #!/usr/bin/env bash und #!/usr/bin/bash?

Was bedeuten /usr/sbin, /usr/local/sbin und /usr/local/bin?

Warum andere Dinge als /home auf eine separate Partition legen?

Unterschied zwischen /bin und /usr/bin

Warum haben die Verzeichnisse /home, /usr, /var usw. alle dieselbe Inode-Nummer (2)?

Sollten Websites gemäß der empfohlenen Verwendung in /var/ oder /usr/ leben?

CentOS /usr/local/lib systemweit $LD_LIBRARY_PATH?