Мне нужна простая команда для вывода списка всех процессов и их информации из заданного PGID.
решение1
Я не вижу способа заранее указать, ps
что нужно выбирать на основе pgrp, поэтому вам придется запросить этот столбец, а затем отфильтровать по нему; что-то вроде:
ps axo pgrp,stat,euid,ruid,tty,tpgid,sess,ppid,pid,pcpu,comm | awk -v pgrp=3668 '$1 == pgrp'
ps -eo pgrp,pid,comm | sed -n -e 1p -e ' /3668/ p'
PGRP=3668; ps -eo pgrp,pid,comm | sed -n -e 1p -e " / $PGRP / p"
решение2
pgrep -ag PGID
Если PGID
это 0
, это означает собственную группу процессов pgrep, например.
$ cat | cat | cat | pgrep -ag0
7301 cat
7302 cat
7303 cat
(обратите внимание, что pgrep
никогда не включает себя в список и pkill
никогда не убивает себя)
решение3
На Дарвине ps -g $pgid
все работает так, как вы просите.
В Linux это не работает и вам нужно использовать какое-то другое решение. Вы можете использовать, ps --ppid $ppid
которое выводит список всех дочерних процессов данного родителя.