GNU/Linux >> Belajar Linux >  >> Linux

ps:Cara bersih untuk hanya mendapatkan proses induk?

/usr/bin/pgrep -o <process_name>

di mana '-o' adalah proses pencocokan tertua (paling baru dimulai)


Solusi lain (dari sini):

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

Setelah berdiskusi dengan @netcoder tentang komentar jawabannya, dia menggunakan trik yang bagus :D
Menggunakan f pada ps akan selalu menempatkan orang tua di atas yang hebat.

Ini seharusnya berfungsi:

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

seperti yang saya sebutkan di komentar, ini akan mengembalikan pid dari satu proses saja.

Saya akan memilih:

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

yaitu:

  • daftar proses yang berjalan r (atau e jika Anda menginginkan segalanya)
  • bersama dengan grafik induk/anak f
  • keluaran hanya pid dan nama perintah -opid,cmd
  • hanya untuk proses yang diberikan -C <process>

lalu

  • jika bidang ke-2 - yang merupakan perintah (-opid,cmd ) - tidak dimulai dengan \ atau | maka ini adalah proses induk, jadi cetak bidang pertama - yang merupakan pid.

tes sederhana:

$ 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 Di Linux?

  2. Perbedaan Antara /opt Dan /usr/local?

  3. Linux – Menggabungkan /usr/bin Dan /usr/sbin Ke /bin (gnu/linux)?

  1. gcc - /usr/bin/ld error:tidak dapat menemukan <library> di /usr/local/lib meskipun ldconfig mencantumkannya, dan path ditambahkan ke ld.so.conf

  2. Apa arti dari /usr/sbin, /usr/local/sbin dan /usr/local/bin?

  3. Memindahkan /bin konten ke /usr/bin, mungkin untuk membatalkan?

  1. Bagaimana Linux Menangani Beberapa Pemisah Jalur Berturut-turut (/home////username///file)?

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

  3. Haruskah situs web berada di /var/ atau /usr/ sesuai dengan penggunaan yang disarankan?