GNU/Linux >> Znalost Linux >  >> Linux

ps:Čistý způsob, jak získat pouze rodičovské procesy?

/usr/bin/pgrep -o <process_name>

kde '-o' je nejstarší (nejméně nedávno zahájený) z odpovídajících procesů


Jiné řešení (zde):

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

Po diskuzi s @netcoder o komentářích jeho odpovědi použil pěkný trik :D
Pomocí f dne ps vždy dostane rodiče navrch, což je skvělé.

Mělo by to fungovat:

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

jak jsem zmínil v komentářích, vrátí to pid pouze jednoho procesu.

Šel bych s:

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

to je:

  • seznam běžících procesů r (nebo e pokud chcete všechno)
  • společně s grafem rodiče/děti f
  • vypište pouze pid a název příkazu -opid,cmd
  • pouze pro daný proces -C <process>

a poté

  • pokud je 2. pole – což je příkaz (-opid,cmd ) - nezačíná \ nebo | pak je to nadřazený proces, takže vytiskněte 1. pole - což je pid.

jednoduchý 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. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

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

  3. Linux – sloučení /usr/bin A /usr/sbin do /bin (gnu/linux)?

  1. Kdy mám použít /dev/shm/ a kdy /tmp/?

  2. Rozdíl mezi /bin a /usr/bin

  3. Přesunutý obsah /bin do /usr/bin, je možné vrátit zpět?

  1. Proč mají všechny adresáře /home, /usr, /var atd. stejné číslo inodu (2)?

  2. Měly by weby žít ve /var/ nebo /usr/ podle doporučeného použití?

  3. CentOS /usr/local/lib pro celý systém $LD_LIBRARY_PATH?