Linux
如何以程式方式檢索正在執行的程序的 GID
我需要編寫一些 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所做的。