确定正在运行的进程属于哪个组?

确定正在运行的进程属于哪个组?

我正在尝试确定属于哪个组跑步子进程已继承。我想根据给定的 uid 找到该进程所在的所有组。有没有办法通过/proc文件系统来确定这一点?

答案1

对于有效组 ID、真实组 ID 和补充组 ID(用于访问控制):

ps -o gid,rgid,supgid -p "$pid"

gid并且rgid相当可移植,supgid但不太可移植(所有 3 个都可以通过psfrom procps 来使用,通常在基于 Linux 的系统上找到)。

grouprgroup并且supgrp 可用于将组 id 转换为组名称,但请注意,对于具有多个相应组名称的组 id,只会显示其中之一(与ls -lvsls -n或任何基于 ids 处理用户或组名称的内容相同) )。

对于进程组 ID(用于终端作业控制):

ps -o pgid -p "$pid"

要将其存储到变量中:

pgid=$(($(ps -o pgid= -p "$pid")))

答案2

组列表Groups/proc/<pid>中给出/status;例如,

$ grep '^Groups' /proc/$$/status
Groups: 4 24 27 30 46 110 115 116 1000

主要组如下Gid

$ grep '^Gid' /proc/$$/status
Gid:    1000    1000    1000    1000

ps正如其他答案所示,还能够显示进程的组。

答案3

使用ps

$ ps -o group,supgrp $$
GROUP    SUPGRP
muru     adm,cdrom,sudo,dip,www-data,plugdev,lpadmin,mlocate,sambashare,lxd,libvirtd,docker,muru

man ps,输出列用于-o

   egid        EGID      effective group ID number of the process as a
                         decimal integer.  (alias gid).

   egroup      EGROUP    effective group ID of the process.  This will be
                         the textual group ID, if it can be obtained and
                         the field width permits, or a decimal
                         representation otherwise.  (alias group).

   gid         GID       see egid.  (alias egid).

   group       GROUP     see egroup.  (alias egroup).

   supgid      SUPGID    group ids of supplementary groups, if any.  See
                         getgroups(2).

   supgrp      SUPGRP    group names of supplementary groups, if any.  See
                         getgroups(2).

答案4

在从 SVr4 派生的 UNIX 系统上,您可以调用:

pcred <prcess-id>

注意,官方procfs不是ASCII而是二进制。

相关内容