/proc에서 프로세스 그룹 ID를 얻을 수 있습니까?

/proc에서 프로세스 그룹 ID를 얻을 수 있습니까?

존재하다"https://stackoverflow.com/questions/13038143/how-to-get-pids-in-one-process-group-in-linux-os"모든 답변에서 언급된 것을 보았지만 ps언급되지 않았습니다 /proc.

"ps"는 ​​이식성이 그다지 좋지 않은 것 같습니다(Android 및 Busybox 버전에는 다른 매개변수가 필요함). 간단하고 이식 가능한 도구를 사용하여 pgid와 함께 pid를 나열할 수 있기를 바랍니다.

Tgid:/proc/.../status에서 (스레드 그룹 ID), Gid:(그룹 ID는 프로세스를 그룹화하기 위한 것이 아니라 보안을 위한 것임)를 볼 수 있지만 아무것도 없습니다 PGid:...

pid 에서 pgid 를 얻는 다른 (사용되지 않는) 방법은 ps무엇입니까 ?

답변1

당신은 필드를 볼 수 있습니다다섯 번째 장소출력에서 /proc/[pid]/stat.

$ ps -ejH | grep firefox
 3043  2683  2683 ?        00:00:21   firefox

$ < /proc/3043/stat sed -n '$s/.*) [^ ]* [^ ]* \([^ ]*\).*/\1/p'
2683

~에서man proc:

/proc/[pid]/stat
              Status information about the process.  This is used by ps(1).  It is defined in /usr/src/linux/fs/proc/array.c.

              The fields, in order, with their proper scanf(3) format specifiers, are:

              pid %d      The process ID.

              comm %s     The filename of the executable, in parentheses.  This is visible whether or not the executable is swapped out.

              state %c    One character from the string "RSDZTW" where R is running, S is sleeping in an interruptible wait, D is waiting in
                          uninterruptible disk sleep, Z is zombie, T is traced or stopped (on a signal), and W is paging.

              ppid %d     The PID of the parent.

              pgrp %d     The process group ID of the process.

              session %d  The session ID of the process.

다음은 사용할 수 없습니다.

awk '{print $5}'

파일이 공백으로 구분된 목록이 아니기 때문입니다. 두 번째 필드(프로세스 이름에는 공백이나 개행 문자가 포함될 수 있음) 예를 들어, 대부분의 스레드에는 firefox일반적으로 이름에 공백 문자가 있습니다.

)따라서 마지막 문자 발생 이후의 세 번째 필드를 인쇄 해야 합니다 .

관련 정보