존재하다"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
일반적으로 이름에 공백 문자가 있습니다.
)
따라서 마지막 문자 발생 이후의 세 번째 필드를 인쇄 해야 합니다 .