我使用一个很好用的(免费)进程管理器,叫做空调监控器对于 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-bin
而open -a Firefox
不是不可能的使此更改独立于应用程序的启动方式,而无需实际修补二进制文件本身(这通常非常复杂,甚至根本不可能)
你可以按照我解释的做这里,但不是传递命令行参数,而是通过 启动应用程序nice
。只要您使用open
、Dock、双击应用程序包等方式启动它,这将与真实应用程序没有区别。如果您重命名真实二进制文件并为 shell 脚本赋予其原始名称(不更改Info.plist
,即使硬编码调用也会通过您的nice
脚本)。这仍然允许用户自己启动(现在已重命名的)二进制文件,但除此之外,它还可以工作。