我的应用程序需要将文件写入文件系统上的受限位置。
为此,我使用以 root 身份运行的辅助工具。
一切正常,遵循这个例子,我的辅助工具已正确安装并运行。我使用此解决方案能够“唤醒”辅助工具,否则它在初始加载后不会启动多次。
辅助工具正在等待来自主应用程序的消息,并正确执行它们。我还有一种消息要求该工具关闭,它也可以正常工作。
问题是launchd
每次退出时都重新启动该工具,无论我在launchd.plist
file.
我不希望帮助程序工具永远运行,等待消息,而是仅按需启动。
Question: 辅助工具每次结束后都会重新启动,这正常吗?如果没有,如何让它死掉并按需重新启动?
这里是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
管理流程。
Typing man launchd.plist
进入终端为您提供所有选项launchd
明白了。其中你可以找到(强调我的):
KeepAlive
This optionalkey 用于控制您的作业是保持持续运行还是让需求和条件控制调用。默认为 false因此只有需求才能开始这项工作。价值可以设置为 true无条件地保住这份工作。或者,可以指定条件字典来选择性地控制 launchd 是否使作业保持活动状态。如果提供了多个键,则启动或对它们进行“或”运算,从而为作业提供最大的灵活性,以优化逻辑并在必要时停止。如果 launchd 找不到重新启动作业的理由,它将回退到基于需求的调用。当配置为保持活动状态时,快速且频繁退出的作业将受到限制,以节省系统资源。
您没有准确地写下“键和值的各种组合”。但从本文档来看,如果您想要一个按需启动的守护进程,您应该简单地删除<key>KeepAlive</key>
从您的 plist 中或将其值设置为<false/>
代替<dict>...</dict>
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)