Linux

如何以程式方式檢索正在執行的程序的 GID

  • June 5, 2019

我需要編寫一些 C 程式碼來檢查我知道其 PID 的正在執行的程序的有效 GID。我還沒有找到任何直接的方法來做到這一點。我可以使用許多重量級的組合,例如呼叫popen("/bin/ps ARGS", "r")和解析其輸出,或fopen("/proc/PID/status", "r")解析輸出,但我正在尋找一種更清潔、更直接的方法。如果只getegid()接受一個 PID 參數…

這似乎是一個非常受歡迎的問題,所以我想把答案說得很清楚。@MarkPlotnick 給出了最好的答案,作為對先前(相當不錯的)答案的評論,但我們沒有引起他的注意來重新發布它,所以我可以接受它作為正確的答案並幫助人們。所以,向馬克道歉:

Mark Plotnick 說:你也可以做 stat("/proc/nnn", &stb); 程序的有效gid 將在stb.st_gid 中。這同時更便攜(它適用於 Linux 和 FreeBSD)和更不便攜(它沒有記錄)。

謝謝馬克!

我不知道有任何攜帶式方法可以做到這一點。我想也許ptrace(),但我無法從手冊頁中看到。即使可行,以任何方式“跟踪”其他過程也可能是不必要的侵入性

對於 Linux,您的使用建議與fopen("/proc/PID/status", "r")您將獲得的一樣乾淨和直接。這似乎是gdb所做的。

引用自:https://unix.stackexchange.com/questions/140451