上下文: Dropbox周期性地占用我的CPU 100%,使我的笔记本电脑边线无法使用。工具节流阀使限制任何给定进程(PID)使用的CPU数量成为可能。
Dropbox实际上在我的机器上有几个PID,我想使用bash来循环它们。
我得到的最接近一条线的是:
pgrep -f Dropbox | xargs -I{} cputhrottle {} 30 &
这有两个问题:
1libc++abi.dylib: terminating with uncaught exception of type Process::ManipulatorException: Error on task_for_pid of pid 720, res = 5我不确定是否应该放弃一条线,但我不知道如何使下列for-循环工作:
for i in $(pgrep -f Dropbox); do
cputhrottle $i 30 &
done这给了syntax error near unexpected token ';'
发布于 2019-01-17 19:59:39
苹果已经改变了他们的操作系统安全模型,打破了task_for_pid的cputhrottle所依赖的功能。这种更改似乎破坏了cputhrottle,我怀疑当您手动调用它时,cputhrottle实际上也不起作用。
苹果似乎也很想阻止task_for_pid的使用,因为它目前在Apple文档中完全没有文档记录,在任何地方都很难在任何文档中找到对它的任何引用。我不知道为什么cputhrottle的作者选择使用这个特定的函数来构建他的程序。
如果您真的愿意,您可以重新构建cputhrottle,使其具有正确的安全权限。
这里的另一个解决方案是找到另一个要使用的程序。也许只需要使用内置的nice功能?
对OS安全性更改的引用:
http://os-tres.net/blog/2010/02/17/mac-os-x-and-task-for-pid-mach-call/ Guide/RuntimeProtections/RuntimeProtections.html
task_for_pid马赫陷阱的来源,如果您有兴趣的话:
为了更好地解释您所看到的错误消息,退出代码5实际上是KERN_FAILURE,这是一个通用的捕获-所有指示被调用的内核函数没有成功。在这种情况下,可能是由于无效的安全权限。
https://stackoverflow.com/questions/54242957
复制相似问题