実行中子プロセスが継承したグループを特定しようとしています。プロセスがそのuidを与えられているすべてのグループを見つけたい。 /proc
ファイルシステムを介してこれを確認する方法はありますか?
グループのリストは、/proc/
<pid> /status
のGroups
にあります。例えば、
$ 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
は、他の回答が示すように、プロセスのグループを表示することもできます。
実効グループID、実グループID、および補足グループID(アクセス制御に使用されるもの)の場合:
ps -o gid,rgid,supgid -p "$pid"
gid
とrgid
はかなり移植可能ですが、supgid
ほどではありません(通常、Linuxベースのシステムで見られるprocpsのps
を使用すると、3つすべてを使用できます)。 。
group
、rgroup
およびsupgrp
を使用してグループIDをグループ名に変換できますが、対応するグループ名が複数あるグループIDの場合、そのうちの1つだけが表示されます(ls -l
とls -n
、またはIDに基づいてユーザー名またはグループ名を扱うものと同じ)。
プロセスグループID(ターミナルジョブ制御に使用される)の場合:
ps -o pgid -p "$pid"
変数に格納するには:
pgid=$(($(ps -o pgid= -p "$pid")))
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).