Як отримати список ідентифікаторів процесів, що знаходяться в заданому ідентифікаторі групи


3

Переглядаючи сторінку чоловіка, я б очікував, що це спрацює:

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

(Завдяки mst на #perl для perl-fu)

Ось більш традиційна версія командного рядка (спасибі mst), але все ще трохи незручно. Попередньо потрібно встановити $ process_group:

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

Відповіді:


4

Використовуйте 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.+'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.