如何在 Mac OS X(或 iOS 等)上永久“重新调整”某个进程的优先级?

如何在 Mac OS X(或 iOS 等)上永久“重新调整”某个进程的优先级?

我使用一个很好用的(免费)进程管理器,叫做空调监控器对于 Mac OS X,它有很多很酷的隐藏功能,其中之一就是能够单击正在运行的进程并将“renice”从 +20(较低优先级)设置为 -20(最高优先级)。

最好的部分是它在重启后仍然有效。因此,如果您希望 XYZ 始终受到充分关注,只需设置一次即可。

我想在运行特定守护进程的 iPad 上执行同样的事情(重新设置进程的优先级),但我不知道如何永久设置重新设置优先级。

我可以这样做一次,而且效果很好,但重启后设置就会丢失。我在某处读到过。

现在,至于永久重置进程的优先级,这不能直接完成。但是,您可以使用启动应用程序然后立即重新设置优先级的 shell 脚本来伪造它。给该脚本一个“.command”扩展名,它将在 GUI 中可双击。不是很优雅,但它完成了工作。

但正如它所说,不是很优雅,而且我不认为 ATMonitor 就是这样做的。

我发现这个问题他们给出了将其作为启动参数的方法,但没有明确的方法将其保存为持久值。例如,如果程序不是由 launchd 启动的。

如何为每个可执行二进制文件设置永久的 renice 级别,而不依赖于它的 PID、何时、如何或为何启动?

答案1

经过大量研究,我找到了一种创建 applescript 的方法,它可以启动和重新设置程序。它还可以为您处理整个管理员密码问题。只需将 xxxxxxxxx 替换为您自己的密码。我已将其用于一系列程序,似乎都有效。老实说,我不记得为什么在其中设置了 1 秒的延迟;我想我只是想确保程序在重新设置之前已经启动。我确信这个脚本有很多变体。这个脚本的好处是您不必打开活动监视器、查找进程 ID 等。这个脚本会为您完成所有这些工作。我只需将每个脚本保存为应用程序,启动它,一切都会很快完成。顺便说一句,虽然我喜欢 atMonitor,但它确实有突然挂起系统的报告。请参阅 MacUpdate 上对它的评论。


tell application "Safari"
    activate
    delay 1
end tell

tell application "System Events" to set unixID to unix id of process "Safari"
do shell script ("renice -20 " & unixID) password "xxxxxxxxx" with administrator privileges

答案2

关于 iPad 的问题与本网站无关,因为它被视为“电子设备”;请参阅常问问题

针对 Mac OS X 的应答:

atMonitor 执行的更改实际上不会在重启之间坚持。当应用程序和 atMonitor 再次运行时,它们会重新应用。如果您退出 atMonitor 并重新启动重新设置了 nice 的应用程序,其 nice 值将再次为 0(使用nice中的列进行验证ps axl)。因此,此方法要求您运行 atMonitor。

除此之外,由于您可以直接运行实际的二进制文件,例如,/Applications/Firefox.app/Contents/MacOS/firefox-binopen -a Firefox不是不可能的使此更改独立于应用程序的启动方式,而无需实际修补二进制文件本身(这通常非常复杂,甚至根本不可能)

你可以按照我解释的做这里,但不是传递命令行参数,而是通过 启动应用程序nice。只要您使用open、Dock、双击应用程序包等方式启动它,这将与真实应用程序没有区别。如果您重命名真实二进制文件并为 shell 脚本赋予其原始名称(不更改Info.plist,即使硬编码调用也会通过您的nice脚本)。这仍然允许用户自己启动(现在已重命名的)二进制文件,但除此之外,它还可以工作。

相关内容