quu*_*man 4 linux perl command-line posix
通过手册页,我希望它能工作:
ps ah -o pid,pgrp -G 18322
Run Code Online (Sandbox Code Playgroud)
但这显示了与没有 -G 参数时完全相同的列表。我想要一种更明智的方式来产生此输出:
ps ah -o pid,pgrp | perl -e 'while(<STDIN>){ my @ws = split " ", $_; if ($ws[1] eq $ARGV[0]) { print $ws[0]."\n" } }' 18322
Run Code Online (Sandbox Code Playgroud)
(感谢 #perl 上的 mst 提供的 perl-fu)
这是一个更传统的命令行版本(再次感谢 mst),但仍然有点尴尬。$process_group 需要预先设置:
ps ah -o pgrp,pid | egrep '^'$process_group' ' | awk '{print $2}'
Run Code Online (Sandbox Code Playgroud)
改用pgrep:
pgrep -g 18322
Run Code Online (Sandbox Code Playgroud)
从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.
Run Code Online (Sandbox Code Playgroud)
或者,您可以ps用更简单的方式解析输出:
ps xh -o pgrp,pid | awk '$1==18322{print $2}'
Run Code Online (Sandbox Code Playgroud)
或者只是简化你的(不必要的复杂)原始 Perl 方法:
ps xh -o pgrp,pid | perl -lane 'print $F[1] if $F[0] eq 5592'
Run Code Online (Sandbox Code Playgroud)
要不就grep:
ps xh -o pgrp,pid | grep -Po '\s*5592\s*\K.+'
Run Code Online (Sandbox Code Playgroud)