有没有一个简单的方法来寻找一个进程的所有者在Unix中使用C?

yhxst69z  于 2022-11-04  发布在  Unix
关注(0)|答案(1)|浏览(147)

我希望能够检查一个进程的所有者,这个进程的ID是我在Unix系统上用C得到的。它也需要在cygwin上工作。另外,如果能得到这个进程的创建日期,那就太好了。
我发现有很多方法可以通过在/proc/ /中查找生成的文件。但不幸的是,在cygwin上,你需要正确的权限才能读取这些文件。如果可能的话,我正在寻找一种不使用这些文件或系统命令的方法。我还发现了以下威胁:How to programatically get uid from pid in osx using c++?但它不会工作,因为缺少定义的克恩_PROC,KERN_PROC_PID和一些更多的.(还没有找到库为那些在C中)
所以简而言之:有没有人知道我如何使用c来获得一个特定进程的信息,而不需要系统调用或阅读/proc/中的文件?

kjthegm6

kjthegm61#

这里是在使用ps命令的简单实现下。
这当然不是最优雅的,但它应该适用于Unix和Cygwin:


# include <stdio.h>

# include <string.h>

int get_proc_uid(int pid, char *uid, int uid_size)
{
 FILE *fp;
 int pid_l, ret = -1;
 char uid_l[16];
 char cmd[64], line[128];

 snprintf(cmd, sizeof(cmd), "ps | grep %d", pid);
 fp = popen(cmd, "r");
 if(fp == NULL)
    return ret;

 while(fgets(line, sizeof(line), fp) != NULL)
    {
    if(strstr(line, "grep") == NULL)//filter grep dummy result
        {
        sscanf(line, "%d %s", &pid_l, uid_l);
        if(pid_l == pid)
            {
            strncpy(uid, uid_l, uid_size);
            ret = 0;
            break;
            }
        }
    }
 pclose(fp);

 return ret;
}

相关问题