我正在尝试创建辅助对象(它可以是守护进程或代理)。这应该是按需启动的,并且它应该存在多个实例,正如您所看到的Chrome和Safari助手一样。
我尝试了什么? 我已经提到了这些Apple Docs,Launchd Tutorial& Creating Start Up Items in Mac OS X
有人提到,对于进程数量我们应该使用NumberOfProcesses
密钥,我使用它,但在Activity Monitor中我只看到一个实例。
我的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>Label</key>
<string>com.anoop.test</string>
<key>NumberOfProcesses</key>
<string>5</string>
<key>ProgramArguments</key>
<array>
<string>/Users/anoopvaidya/Desktop/0@/WebTwainService</string>
<string>start</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>Application is agent (UIElement)</key>
<string>YES</string>
</dict>
</plist>
我是否正确地在Chrome上复制Launch Agent Helper? 请帮我找到完成它的最佳方法?
答案 0 :(得分:2)
NumberOfProcesses
不是顶级密钥。它是HardResourceLimits
的子键,用于指示守护程序或代理程序在内核阻止之前可以创建的子进程数。它与launchd创建流程的多个实例无关。
Launchd不支持管理单个作业的多个进程。 Chrome和Safari不使用Launchd来管理其作业流程。他们自己管理这些。
如果您希望每个应用程序的单独进程得到帮助,那么您可以使用Application XPC Service实现此目的,但XPC也不支持协助单个应用程序的服务的多个进程。有关详情,请参阅Running multiple instances of the same XPC service (NSXPCConnection)。
典型的模式是拥有一个接受传入连接的LaunchAgent / Daemon,然后分叉自己独立处理每个客户端。我假设相同的模式应该适用于XPC服务(现在是首选),但我之前没有这样做。