2011-09-27 86 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用户身份运行并希望以登录用户身份运行,则可能无法工作。

相关问题