Как проверить, принадлежит ли pid к текущей сессии пользователя? - PullRequest
1 голос
/ 27 сентября 2011

Я могу получить список запущенных процессов из исходного кода this на mac.

Теперь я хочу отфильтровать эти процессы для разных пользователей или, по крайней мере, для текущего сеанса пользователя.

Ответы [ 2 ]

2 голосов
/ 27 сентября 2011

Вы можете просто расширить свой код следующим образом ..

    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);
        }
    }
0 голосов
/ 13 октября 2011

Если быть более точным, вы можете получить имя пользователя купить эту технику

    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 и хотите войти в систему.

...