我想要一个简单的命令来列出给定 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
它列出给定父进程的所有子进程。