web-dev-qa-db-ja.com

実行中のプロセスが属しているグループを特定しますか?

実行中子プロセスが継承したグループを特定しようとしています。プロセスがそのuidを与えられているすべてのグループを見つけたい。 /procファイルシステムを介してこれを確認する方法はありますか?

7
Mandragor

グループのリストは、/proc/ <pid> /statusGroupsにあります。例えば、

$ 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は、他の回答が示すように、プロセスのグループを表示することもできます。

7
AlexP

実効グループID、実グループID、および補足グループID(アクセス制御に使用されるもの)の場合:

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

gidrgidはかなり移植可能ですが、supgidほどではありません(通常、Linuxベースのシステムで見られるprocpsのpsを使用すると、3つすべてを使用できます)。 。

grouprgroupおよびsupgrpを使用してグループIDをグループ名に変換できますが、対応するグループ名が複数あるグループIDの場合、そのうちの1つだけが表示されます(ls -lls -n、またはIDに基づいてユーザー名またはグループ名を扱うものと同じ)。

プロセスグループID(ターミナルジョブ制御に使用される)の場合:

ps -o pgid -p "$pid"

変数に格納するには:

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

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).
3
muru