objective-c – 如何获取Mac上所有正在运行的进程的列表?

获得:

>每个进程ID
>进程使用了​​多少CPU时间

我们可以在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);
        }
    }
}

转载注明原文:objective-c – 如何获取Mac上所有正在运行的进程的列表? - 代码日志