C 如何检查pid是否属于当前用户会话?

C 如何检查pid是否属于当前用户会话?,c,macos,unix,macos-carbon,freebsd,C,Macos,Unix,Macos Carbon,Freebsd,我可以从mac上的源代码中获得正在运行的进程列表 现在,我想为不同的用户过滤这些进程,或者至少为当前用户会话过滤这些进程 您可以像这样扩展代码 kinfo_proc *mylist; size_t mycount = 0; mylist = (kinfo_proc *)malloc(sizeof(kinfo_proc)); GetBSDProcessList(&mylist, &mycount); char *user = getenv

我可以从mac上的源代码中获得正在运行的进程列表


现在,我想为不同的用户过滤这些进程,或者至少为当前用户会话过滤这些进程

您可以像这样扩展代码

    kinfo_proc *mylist;
    size_t mycount = 0;
    mylist = (kinfo_proc *)malloc(sizeof(kinfo_proc));
    GetBSDProcessList(&mylist, &mycount);

    char *user  = getenv("USER");

    for (int i = 0; i < mycount; i++) 
    {       
        uid_t uid = mylist[i].kp_eproc.e_pcred.p_ruid;
        struct passwd * pwd = getpwuid(uid);
        char    * username = pwd->pw_name;

        if(strcmp(username, user) == 0)
        {
            printf(" %d - %s \n", mylist[i].kp_proc.p_pid, mylist[i].kp_proc.p_comm);
        }
    }
kinfo_proc*mylist;
大小\u t mycount=0;
mylist=(kinfo_proc*)malloc(sizeof(kinfo_proc));
GetBSDProcessList(&mylist,&mycount);
char*user=getenv(“用户”);
for(int i=0;ipw_name;
if(strcmp(用户名,用户)==0)
{
printf(“%d-%s\n”,mylist[i].kp\u-proc.p\u-pid,mylist[i].kp\u-proc.p\u-comm);
}
}

更准确地说,你可以购买这种技术

    SCDynamicStoreRef   store;  
    store = SCDynamicStoreCreate(NULL, CFSTR("com.apple.dts.ConsoleUser"), NULL, NULL);
    CFStringRef  currentConsoleUser = CopyCurrentConsoleUsername(store);

    const int kBufferSize = 256;
    char logedinusername[kBufferSize];
    CFStringGetCString(currentConsoleUser,logedinusername,kBufferSize,kCFStringEncodingMacRoman);
作为getenv(“用户”);如果您以root用户身份运行并且希望登录用户,则可能无法工作