有效获取进程和名称列表

aro*_*ooo 3 macos objective-c xcode4 osx-lion

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

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

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

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

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

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

谢谢!

Jos*_*ell 8

好吧,-[NSWorkspace runningApplications]它将为您提供由NSRunningApplication实例表示的用户进程列表.一个NSRunningApplication拥有processIdentifier财产,持有pid_t其进程,然后你可以传递给的ps-这可能是更有效的.

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