objective-c - 高效获取进程和名称列表

标签 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 的内容,但我不确定最好的方法是什么。

谢谢!

最佳答案

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

另请查看 Apple 的示例项目 "AppList" ;它演示了使用 NSWorkspaceNSRunningApplication,虽然我不记得它是否显示 CPU 使用率。

关于objective-c - 高效获取进程和名称列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7406657/

相关文章:

iphone - 如何在 Xcode 4 上处理 Info.plist 的 "Clear File History"?

ios - 自定义 UITableViewCell 不显示重新排序控件

objective-c - 地址 - 仅添加到内存

iphone - MPMoviePlayerController 不会自动将旋转更改为横向

python-3.x - QGIS 3不会安装在已经通过Anaconda安装的python3.6的mac上

objective-c - 使用 Instagram API 进行身份验证时,gtm-oauth2 在 Mac OSX 上崩溃

ios - 解析 UICollectionView 的查询不工作

java - 如何编写带参数的苹果脚本?

Xcode 4 : Framework localization not working

ipad - iOS 应用程序在没有调试信息和日志消息的情况下退出的问题