/ 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}'

そのファイルは空白で区切られたリストではないためです。2番目のフィールド(プロセス名には空白または改行文字が含まれる場合があります)。たとえば、ほとんどのスレッドfirefox名前に通常、スペース文字が含まれています。

したがって、最後に出現した)文字の後に3番目のフィールドを印刷する必要があります。


awk '{print $5}'プロセス名(2番目のフィールド)にスペースまたは改行文字が含まれている可能性があるため、正しい答えが得られるとは限らないことに注意してください。
ステファンシャゼル

/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"
ステファンChazelas

@StephaneChazelas:ありがとう、答えを更新しました!
クオンルム

ファイル名よりもプロセス名です。問題は通常、名前を変更するプロセスで発生します(最後に実行したファイルの名前から取得したものから)。
ステファンシャゼル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.