首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迭代pgrep结果

迭代pgrep结果
EN

Stack Overflow用户
提问于 2019-01-17 19:26:17
回答 1查看 515关注 0票数 2

上下文: Dropbox周期性地占用我的CPU 100%,使我的笔记本电脑边线无法使用。工具节流阀使限制任何给定进程(PID)使用的CPU数量成为可能。

Dropbox实际上在我的机器上有几个PID,我想使用bash来循环它们。

我得到的最接近一条线的是:

pgrep -f Dropbox | xargs -I{} cputhrottle {} 30 &

这有两个问题:

  1. Cpu油门抛出一个错误(当直接调用时它不会):1libc++abi.dylib: terminating with uncaught exception of type Process::ManipulatorException: Error on task_for_pid of pid 720, res = 5
  2. 进程似乎不起作用(第一个进程失败了,并且进程仍然处于前台。我不确定这是1的结果还是另一个问题。

我不确定是否应该放弃一条线,但我不知道如何使下列for-循环工作:

代码语言:javascript
复制
for i in $(pgrep -f Dropbox); do 
    cputhrottle $i 30 &
done

这给了syntax error near unexpected token ';'

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-17 19:59:39

苹果已经改变了他们的操作系统安全模型,打破了task_for_pidcputhrottle所依赖的功能。这种更改似乎破坏了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马赫陷阱的来源,如果您有兴趣的话:

Unix.c#L 783-L 929

为了更好地解释您所看到的错误消息,退出代码5实际上是KERN_FAILURE,这是一个通用的捕获-所有指示被调用的内核函数没有成功。在这种情况下,可能是由于无效的安全权限。

返回.h#L94-L96

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54242957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档