如何以编程方式检索正在运行的进程的 GID

如何以编程方式检索正在运行的进程的 GID

我需要编写一些 C 代码来检查我知道 PID 的正在运行的进程的有效 GID。我还没有找到任何直接的方法来做到这一点。我可以使用许多重量级的组合,例如调用popen("/bin/ps ARGS", "r")和解析其输出,或者fopen("/proc/PID/status", "r")解析输出,但我正在寻找一种更干净、更直接的方法。如果只getegid()采用 PID 参数...

答案1

我不知道有什么便携式方法可以做到这一点。我想也许可以ptrace(),但我无法从联机帮助页中看到如何实现。即使这有效,以任何方式“跟踪”其他进程可能都是不必要的侵入性

对于 Linux,您的使用建议fopen("/proc/PID/status", "r")是尽可能干净和直接。好像是什么数据库做。

答案2

这似乎是一个很受欢迎的问题,所以我想把答案说得非常清楚。 @MarkPlotnick 给出了最好的答案,作为对之前(相当好的)答案的评论,但我们还没有引起他的注意而重新发布它,所以我可以接受它作为正确的答案并帮助人们。所以,向马克道歉:

Mark Plotnick 说:您还可以执行 stat("/proc/nnn", &stb);进程的有效 gid 将位于 stb.st_gid 中。这既更便于移植(它适用于 Linux 和 FreeBSD),又不太便于移植(它没有文档记录)。

谢谢马克!

相关内容