我的应用程序需要将文件写入文件系统上的受限位置 为此,我使用以root身份运行的帮助工具。
一切正常,在this example之后,我的帮助工具已正确安装并运行。我使用此解决方案能够“唤醒”辅助工具,否则在初始加载后不会启动多次。
帮助工具正在等待来自主应用程序的消息,并正确执行它们。我还有一种消息要求工具关闭,这也可以正常工作。
问题是launchd
每次退出时都会重新启动该工具,无论我在launchd.plist
文件中指定了哪些键。
我不希望帮助工具永远运行,等待消息,而是仅按需启动。
问题:帮助工具每次结束都重新启动是否正常?如果没有,如何让它死亡并按需重启?
以下是launchd.plist
内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key>
<false/>
</dict>
<key>RunAtLoad</key>
<true/>
<key>Label</key>
<string>com.mycompany.Helper</string>
<key>MachServices</key>
<dict>
<key>com.mycompany.Helper</key>
<true/>
</dict>
</dict>
</plist>
当然,我尝试了各种键和值的组合,以及帮助工具的各种退出状态代码。它没有以任何方式改变launchd
来管理这个过程。
答案 0 :(得分:0)
在终端中键入man launchd.plist
可以为您提供launchd
可以理解的所有选项。您可以找到的那些(重点是我的):
KeepAlive <布尔值或东西字典>
此 可选 键用于控制您的作业是保持连续运行还是让需求和条件控制调用。 默认值为false ,因此只有需求才能开始工作。可以将值 设置为true ,以无条件地保持作业的正常运行。可选地,可以指定条件字典以选择性地控制启动是否使作业保持活动状态。如果提供了多个密钥,则对它们启动“或”运算,从而为作业提供最大的灵活性,以完善逻辑并在必要时停止。如果启动没有找到重新启动作业的理由,则它会基于需求进行调用。配置为保持活动状态时快速且频繁退出的作业将受到限制,以节省系统资源。
您没有写出“键和值的各种组合”的确切含义。但是从本文档中,如果您希望按需启动守护程序,则应仅从plist中删除<key>KeepAlive</key>
或将其值设置为<false/>
而不是<dict>...</dict>
。 / p>