【发布时间】:2011-09-27 09:45:18
【问题描述】:
我可以从mac上的this源代码中获取正在运行的进程列表。
现在,我想为不同用户或至少为当前用户会话过滤这些进程。
【问题讨论】:
标签: c macos unix macos-carbon freebsd
我可以从mac上的this源代码中获取正在运行的进程列表。
现在,我想为不同用户或至少为当前用户会话过滤这些进程。
【问题讨论】:
标签: c macos unix macos-carbon freebsd
你可以像这样扩展你的代码..
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);
}
}
【讨论】:
更准确地说,您可以获得用户名购买此技术
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 用户身份运行并且想要登录用户,则可能无法正常工作。
【讨论】: