MAC OSX代理 - 如何启动多个实例

时间:2015-04-16 16:21:08

标签: macos helper launchd launch-agent

我正在尝试创建辅助对象(它可以是守护进程或代理)。这应该是按需启动的,并且它应该存在多个实例,正如您所看到的Chrome和Safari助手一样。

我尝试了什么? 我已经提到了这些Apple DocsLaunchd 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? 请帮我找到完成它的最佳方法?

1 个答案:

答案 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服务(现在是首选),但我之前没有这样做。