如何获取给定组 ID 中的进程 ID 列表

如何获取给定组 ID 中的进程 ID 列表

根据手册页,我希望它能起作用:

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 上的 mst 提供的 perl-fu)

这是一个更传统的命令行版本(再次感谢 mst),但仍然有点尴尬。$process_group 需要预先设置:

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

答案1

改用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.+'

相关内容