[英]How to get a list of all running processes on a Mac?
获得:
我们可以在C或Objective C中为Mac做这个吗? 一些示例代码会很棒!
通常的方法是进入C并枚举系统中的进程序列号(回到Mac OS X之前的几天).NSWorkspace有API,但它们并不总是以您期望的方式工作。
请注意,经典流程(在PowerPC系统上)将使用此代码(具有不同的流程序列号)进行枚举,即使它们都共享一个流程ID。
void DoWithProcesses(void (^ callback)(pid_t)) {
ProcessSerialNumber psn = { 0, kNoProcess };
while (noErr == GetNextProcess(&psn)) {
pid_t pid;
if (noErr == GetProcessPID(&psn, &pid)) {
callback(pid);
}
}
}
然后,您可以调用该函数并传递一个块,该块将使用PID执行您想要的操作。
使用NSRunningApplication
和NSWorkspace
:
void DoWithProcesses(void (^ callback)(pid_t)) {
NSArray *runningApplications = [[NSWorkspace sharedWorkspace] runningApplications];
for (NSRunningApplication *app in runningApplications) {
pid_t pid = [app processIdentifier];
if (pid != ((pid_t)-1)) {
callback(pid);
}
}
}
您可以使用BSD sysctl例程或ps命令获取所有BSD进程的列表。看看https://stackoverflow.com/a/18821357/944634
嘿,你可以做一个系统调用:
ps -eo pid,pcpu
并解析结果。
您可以使用C中的 system()
进行此调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.