是否可以从/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 版本需要不同的参数),我希望能够使用简单且可移植的工具列出带有 pgids 的 pid。

在 /proc/.../status 中,我看到Tgid:(线程组 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名称中通常包含空格字符。

因此,您需要)在其中最后一次出现字符后打印第三个字段。

相关内容