当前位置:  开发笔记 > 编程语言 > 正文

让task_for_pid()在El Capitan中工作

如何解决《让task_for_pid()在ElCapitan中工作》经验,为你挑选了0个好方法。

几年前,我们编写了一个需要监视多个进程的资源使用情况的应用程序.这是在Snow Leopard的时代.命令行命令ps已经足够我们需要了所以我们得到了源代码的副本ps并找出了它们调用的函数和原因,然后使用类似的调用用于ps我们项目的基础,但我们的是用Objective C编写,而不是C.这不是一个ps副本,我们只是简单地根据代码的建模ps来获取信息的核心.从雪豹到优胜美地,这种方法很好.

进入El Capitan和无根模式.什么工作不再有效.最初我们吹掉了这个,因为我们正在研究El Capitan的beta版本,甚至ps本身也表现出类似的行为.随着时间的推移ps开始在El Capitan下工作,但不是我们的代码.

当我们运行我们的应用程序时,它可以提供通用信息,例如进程名称和所有进程上的pid,但是对于用户实际上并不"拥有"内存和CPU使用的任何进程,它会报告所有内容的零.它似乎正确地报告了用户自己拥有/启动的进程.

查看日志文件,横行错误的类型如下:

系统策略:拒绝(1)mach-priv-task-port

以上显示在El Capitan 10.11.2上.操作系统的早期版本表明存在task_for_pid"不允许"或类似的问题(我现在没有方便的旧日志文件).

查看较新的ps源代码,我发现以下.plist文件现在是开发工具包的一部分.这不是几年前的代码:

http://www.opensource.apple.com/source/adv_cmds/adv_cmds-163/ps/entitlements.plist

以下是psEl Capitan代码的链接:

http://www.opensource.apple.com/source/adv_cmds/adv_cmds-163/ps/

我的问题非常简单,我需要做些什么来让系统允许我们task_for_pid()再次使用,或者更好的是,从内核获取此信息而不会遇到无根模式问题的更好方法.FYI如果无根被禁用,我们当前应用程序中的所有内容都运行正常.通过该plist文件的外观,看起来他们正在签署它并允许访问该功能,但这是一个"仅限苹果"的限额吗?

FWIW我们的原始代码是使用带有旧式make文件的gcc编译的.

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有