Belirli bir grup kimliğindeki işlem kimlikleri listesi nasıl alınır


3

Man sayfasına gidersek, bunun çalışmasını beklerdim:

ps ah -o pid,pgrp -G 18322

Ancak bu, -G argümanları olmadan aynı listeyi gösterir. Bu çıktıyı üretmek için daha sağlıklı bir yol istiyorum:

ps ah -o pid,pgrp | perl -e 'while(<STDIN>){ my @ws = split " ", $_; if ($ws[1] eq $ARGV[0]) { print $ws[0]."\n" } }' 18322

(Perl-fu için #perl mst'e teşekkürler)

İşte daha geleneksel bir komut satırı sürümü (mst için tekrar teşekkürler), ama yine de biraz garip. $ process_group'un önceden ayarlanması gerekiyor:

ps ah -o pgrp,pid | egrep '^'$process_group' ' | awk '{print $2}'

Yanıtlar:


4

pgrepBunun yerine kullanın :

pgrep -g 18322

Kimden man pgrep:

   -g, --pgroup pgrp,...
          Only  match  processes in the process group IDs listed.  Process
          group 0 is translated into pgrep's or pkill's own process group.

Alternatif olarak, psçıktıyı daha basit yollarla ayrıştırabilirsiniz :

ps xh -o pgrp,pid | awk '$1==18322{print $2}'

Veya (gereksiz yere karmaşık) orijinal Perl yaklaşımınızı basitleştirin:

ps xh -o pgrp,pid | perl -lane 'print $F[1] if $F[0] eq 5592'

Veya sadece grep:

ps xh -o pgrp,pid | grep -Po '\s*5592\s*\K.+'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.