2013-08-06 50 views
3

對我自己的問題的長時間回答,使用谷歌搜索並沒有發現任何有用的東西,是篩選'ps'的來源。但在我這樣做之前,有沒有人願意提供懶人的解決方案? :-)是否有系統調用來獲取正在運行的進程的uid/gid?

我發現這個問題:Knowing the process status using procf/<pid>/status但是,該解決方案似乎沒有在3.2內核上可用。這個pstatus_t類型在新內核中可用嗎?如果是這樣,這是否意味着更新的內核提供了/ proc //狀態的二進制接口?

+0

的/ proc /自/狀態似乎一個很好的候選人,但是如果/ proc中未安裝? – Craig

+0

你想要它爲當前進程,或任何其他進程給定一個PID? –

+1

不是當前進程,基於pid的進程。忽略/ proc/self,那只是我將命令行想法轉換成ramblings。我的意思是/ proc//status。 – Craig

回答

2

目前,我能想出的唯一可行的解​​決方案就是沿着這條線。顯然,沒有去努力,看看是否實際工作,我希望它尚未...:

int len, pid, n, fd = open("/proc/12345/status", O_RDONLY | O_NOATIME); 
char buf[4096], whitespace[50]; 

if (0 < (len = read(fd, buf, 4096))) 
{ 
    n = sscanf(buf, "Uid:%s%d ", whitespace, &pid); 
} 
+0

只是'stat'/ proc/pid'目錄並讀取st_uid和st_gid值不是更簡單嗎? – Petesh

+0

這對於獲得'真正的'uid和gid是可以的。它不會給你有效或fs,它當然不會給你補充團體。 – Craig

相關問題