我自己的问题的长答案,在谷歌上搜索并没有发现任何有用的东西,是筛选“ps”的来源。但在我这样做之前,有没有人愿意提供懒人的解决方案?:-)
我发现了这个问题:Knowing the process status using procf/<pid>/status 但是,该解决方案似乎在 3.2 内核上不可用。这种 pstatus_t 类型在较新的内核中可用吗?如果是这样,这是否意味着较新的内核提供了到 /proc//status 的二进制接口?
我自己的问题的长答案,在谷歌上搜索并没有发现任何有用的东西,是筛选“ps”的来源。但在我这样做之前,有没有人愿意提供懒人的解决方案?:-)
我发现了这个问题:Knowing the process status using procf/<pid>/status 但是,该解决方案似乎在 3.2 内核上不可用。这种 pstatus_t 类型在较新的内核中可用吗?如果是这样,这是否意味着较新的内核提供了到 /proc//status 的二进制接口?
目前,我能想出的唯一可行的解决方案就是这样的。显然,没有去努力看看这是否真的像我期望的那样工作......:
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);
}
没有我知道的系统调用,但因为我需要它,所以我编写了这个小程序。享受。
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;
}
如果我没记错的话,有一些系统调用可以用于这种情况:
#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.
有关更多信息,请参阅这些链接: