実行中のプロセスのGIDをプログラムで取得する方法

実行中のプロセスのGIDをプログラムで取得する方法

私が知っているPIDを持つ実行中のプロセスの有効なGIDを確認するには、Cコードを書く必要があります。私はこれを行う直接的な方法を見つけることができませんでした。popen("/bin/ps ARGS", "r")出力を呼び出してfopen("/proc/PID/status", "r")解析するなど、私が使用できるヘビー級の組み合わせがたくさんあります。それ出力されますが、よりクリーンで直接的なアプローチを探しています。 PIDパラメータのみをgetegid()使用する場合...

答え1

私はこれを行うポータブルな方法を知りません。可能性があると思いますptrace()が、マンページでこれを行う方法を見ることはできません。これが機能していても、他のプロセスを「どのような方法でも」追跡することは不必要に邪魔になる可能性があります。

Linuxでは、アドバイスはfopen("/proc/PID/status", "r")できるだけきれいでシンプルでなければなりません。何があると思います。データベースする。

答え2

これは人気のある質問のようで、答えを非常に明確にしたかったのです。 @MarkPlotnickは、以前の(非常に良い)回答に対するコメントで最高の回答を提供しましたが、再投稿するのに十分な関心を集めなかったため、これを正解として受け入れ、人々に役立ちます。よってMarkにお詫び申し上げます。

Mark Plotnickは次のように述べています。プロセスの有効な gid は stb.st_gid にあります。これは移植性が高く(LinuxおよびFreeBSDで動作し)、移植性が低下します(文書化されていません)。

ありがとう、マーク!

関連情報