有效获取流程列表&名称

时间:2011-09-13 18:28:24

标签: objective-c macos xcode4 osx-lion

现在我正在做这样的事情:

NSString *pullProcesses = @"ps axco pid,pcpu,user,command";
system([pullProcesses UTF8String]);
NSLog(pullProcesses);

虽然它的效率有点低,每次调用它时会占用大约15%的CPU。 我有没有有效的方法来获取进程列表及其使用的CPU数量?

此外,有没有办法将该流程列表分解为仅属于用户但不属于系统流程的流程?

我听说NSTask可能有效,但这并不是检查所有用户的进程,只检查在Dock中活动的进程。

我也在阅读有关NSWorkSpace的内容,但我不确定最好的方法是什么。

谢谢!

1 个答案:

答案 0 :(得分:8)

好吧,-[NSWorkspace runningApplications]会为您提供由NSRunningApplication个实例表示的用户进程列表。 NSRunningApplication具有processIdentifier属性,保留其进程的pid_t,然后您可以将其传递给ps - 这可能更有效。

另请参阅Apple的名为"AppList"的示例项目;它演示了使用NSWorkspaceNSRunningApplication,虽然我不记得它是否显示CPU使用情况。