5

我自己的问题的长答案,在谷歌上搜索并没有发现任何有用的东西,是筛选“ps”的来源。但在我这样做之前,有没有人愿意提供懒人的解决方案?:-)

我发现了这个问题:Knowing the process status using procf/<pid>/status 但是,该解决方案似乎在 3.2 内核上不可用。这种 pstatus_t 类型在较新的内核中可用吗?如果是这样,这是否意味着较新的内核提供了到 /proc//status 的二进制接口?

4

3 回答 3

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);
}
于 2013-08-06T12:17:49.767 回答
0

没有我知道的系统调用,但因为我需要它,所以我编写了这个小程序。享受。

static int getPuid (int gpid) 
{ // by Zibri http://www.zibri.org
    char fname[256];
    char buf[256];
    int pid=8;
    sprintf(fname,"/proc/%d/status",gpid);
    FILE *proc; 
    proc = fopen(fname,"r");    
    if (proc) { 
        while(pid--) fgets(buf,256,proc); // skip first 8 lines
        sscanf(buf,"Uid:\t%lu\t",&pid); 
    } else return -1;   
    fclose(proc);   
    return pid;
}
于 2018-03-24T17:39:47.233 回答
0

如果我没记错的话,有一些系统调用可以用于这种情况:

#include <unistd.h>
#include <sys/types.h>

geteuid() //returns the effective user ID of the calling process.
getuid() //returns the real user ID of the calling process.
getgid() //returns the real group ID of the calling process.

getegid() //returns the effective group ID of the calling process.

有关更多信息,请参阅这些链接:

getgid() 的 Unix 手册页

getuid() 的 unix 手册页

于 2019-07-12T10:37:20.400 回答