Manページを見ると、これが機能することが期待されます。
ps ah -o pid,pgrp -G 18322
ただし、これは-G引数がない場合とまったく同じリストを示しています。私はこの出力を生成するためのより賢い方法が欲しいです:
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の#Perlのmstに感謝します)
これはより伝統的なコマンドラインバージョンです(mstに感謝します)が、それでも少し厄介です。 $ process_groupは事前に設定する必要があります。
ps ah -o pgrp,pid | egrep '^'$process_group' ' | awk '{print $2}'
代わりにpgrep
を使用してください。
pgrep -g 18322
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.
または、ps
出力をより簡単な方法で解析することもできます。
ps xh -o pgrp,pid | awk '$1==18322{print $2}'
または、(不必要に複雑な)元のPerlアプローチを単純化するだけです。
ps xh -o pgrp,pid | Perl -lane 'print $F[1] if $F[0] eq 5592'
または単にgrep
:
ps xh -o pgrp,pid | grep -Po '\s*5592\s*\K.+'