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


16

" /programming/13038143/how-to-get-pids-in-one-process-group-in-linux-os "에서 나는 모든 답변을 언급 ps하고 언급하지 않았습니다 /proc.

"ps"는 ​​이식성이 좋지 않은 것으로 보이며 (Android 및 Busybox 버전마다 다른 인수가 필요함) 단순하고 이식 가능한 도구를 사용하여 pgid를 사용하여 pid를 나열 할 수 있기를 원합니다.

/proc/.../status에서 Tgid:(스레드 그룹 ID), Gid:(보안을 위해 그룹 ID, 프로세스를 그룹화하지 않음)을 볼 수 있지만 PGid:...

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

답변:


24

의 출력 에서 필드 5 를 볼 수 있습니다 /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일반적으로 이름에 공백 문자가 있습니다.

따라서 마지막 )문자가 나타난 후 3 번째 필드를 인쇄해야합니다 .


awk '{print $5}'보장되지는 당신에게 공백이나 개행 문자를 포함 할 수 있습니다 프로세스 이름 (두 번째 필드)와 같은 정답을 제공합니다.
Stéphane Chazelas

/proc/.../stat를 확실하게 구문 분석하는 방법은 무엇입니까?
Vi.

3
@Vi, 그 답변보기 perl -l -0777 -ne '@f = /\(.*\)|\S+/g; print $f[4]' "/proc/$pid/stat" 또는p=$(cat "/proc/$pid/stat") && set ${p##*')'} && echo "$3"
Stéphane Chazelas

@ StephaneChazelas : 감사합니다, 나는 대답을 업데이트했습니다!
cuonglm

파일 이름보다 프로세스 이름이 더 많습니다. 이 문제는 일반적으로 이름을 변경하는 프로세스 (마지막으로 실행 한 파일 이름에서 얻은 프로세스)에서 발생합니다.
Stéphane Chazelas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.