2011-09-27 87 views

回答

2

你可以只擴展你的代碼,這樣的..

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

爲了更準確,你可以得到的用戶名購買這一技術

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用戶身份運行並希望以登錄用戶身份運行,則可能無法工作。

相關問題