繁体   English   中英

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

[英]How to get a list of all running processes on a Mac?

获得:

  1. 每个进程ID
  2. 进程使用了​​多少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执行您想要的操作。


使用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);
        }
    }
}

您可以使用BSD sysctl例程或ps命令获取所有BSD进程的列表。看看https://stackoverflow.com/a/18821357/944634

嘿,你可以做一个系统调用:

ps -eo pid,pcpu

并解析结果。

您可以使用C中的 system()进行此调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM