実行中のプロセスがどのグループに属しているかを確認しますか?

実行中のプロセスがどのグループに属しているかを確認しますか?

どのグループに属しているかを確認します。走る子プロセスが継承されました。与えられたuidに基づいて、このプロセスが属するすべてのグループを見つけたいと思います。/procファイルシステムでこれを確認する方法はありますか?

答え1

有効グループID、実グループID、補助グループID(アクセス制御用)の場合:

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

gidそしてrgidかなり移植性supgidがありますが、移植性はあまり良くありません(3つすべて一般的psにLinuxベースのシステムで見つかったprocpsを介して使用できます)。

group、グループIDをグループ名に変換するためにrgroup使用supgrp できますが、複数のグループ名を持つグループIDの場合は、そのうちの1つのみが表示されます(ls -lvsls -nまたはIDに基づいてユーザーまたはグループ名を処理するすべてのエントリと同じ)。 。

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

ps -o pgid -p "$pid"

変数に保存するには:

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

答え2

グループのリストは<pid>Groupsに表示されます。/proc//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>

公式版はprocfsASCIIではなくバイナリです。

関連情報