실행 중인 프로세스가 어느 그룹에 속하는지 확인합니까?

실행 중인 프로세스가 어느 그룹에 속하는지 확인합니까?

어느 그룹에 속하는지 확인하려고 합니다.달리기자식 프로세스가 상속되었습니다. 주어진 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의 경우 그 중 하나만 표시됩니다( ls -lvs ls -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가 아니라 바이너리입니다.

관련 정보