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

Eri*_*tto 6 macos cocoa process objective-c

得到以下所有好处:

  1. 每个的进程ID
  2. 该进程占用了多少CPU时间

我们可以在C或Objective C中为Mac做到这一点吗?一些示例代码会很棒!

Jon*_*pan 6

这样做的通常方法是放入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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以调用该函数并传递一个将对PID进行所需操作的块。


使用NSRunningApplicationNSWorkspace

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我在10.9发行之前就写了这个。;)我将对其进行更新。 (3认同)

Gui*_*ois 0

嘿,你可以进行系统调用:

ps -eo pid,pcpu
Run Code Online (Sandbox Code Playgroud)

并解析结果。

您可以使用 C 进行system()调用