我正在尝试创建辅助对象(它可以是守护进程或代理)。这应该按需启动,并且它的多个实例应该存在,正如您在 Chrome 和 Safari 助手中看到的那样。
我尝试过什么? 我参考了这些 Apple Docs、Launchd 教程 和 在 Mac OS X 中创建启动项
其中提到,对于进程数量,我们应该使用
NumberOfProcesses
键,我使用了它,但在活动监视器中我只看到一个实例。
我的 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 的正确路径上? 请帮我找到最好的方法来完成它?
NumberOfProcesses
不是顶级密钥。它是 HardResourceLimits
的子键,用于指示在内核停止之前您的守护进程或代理可以创建多少个子进程。它与 launchd 创建进程的多个实例无关。
Launchd 不支持管理单个作业的多个进程。 Chrome 和 Safari 不使用 Launchd 来管理其作业流程。他们自己管理这些。
如果您希望每个应用程序都有一个单独的进程得到帮助,那么您可以使用应用程序 XPC 服务来实现这一目标,但 XPC 也不支持协助单个应用程序的服务的多个进程。有关更多信息,请参阅运行同一 XPC 服务 (NSXPCConnection) 的多个实例。
典型的模式是有一个 LaunchAgent/Daemon 接受传入连接,然后分叉自己来独立处理每个客户端。我认为相同的模式应该适用于 XPC 服务(现在是首选),但我以前没有以这种方式构建过。
MultipleInstances
(在macOS 14.1上看到)例如,检查
/System/Library/LaunchDaemons/com.apple.DesktopServicesHelper.plist