【问题标题】:How to check if pid belongs to current user session?如何检查pid是否属于当前用户会话?
【发布时间】:2011-09-27 09:45:18
【问题描述】:

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

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

【问题讨论】:

    标签: c macos unix macos-carbon freebsd


    【解决方案1】:

    你可以像这样扩展你的代码..

        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);
            }
        }
    

    【讨论】:

      【解决方案2】:

      更准确地说,您可以获得用户名购买此技术

          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);
      

      as getenv("USER");如果您以 root 用户身份运行并且想要登录用户,则可能无法正常工作。

      【讨论】:

        猜你喜欢
        • 2016-12-16
        • 2011-07-06
        • 1970-01-01
        • 2020-01-03
        • 2020-09-20
        • 2020-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多