我需要编写一些 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),又不太便于移植(它没有文档记录)。
谢谢马克!