是否可以使用在Foundation.framework (NSXPCConnection等)中找到的XPC运行同一个XPC服务的多个实例?文档对这件事没有提供太多的洞察力。
编辑:做了一个快速测试,似乎只有一个服务实例在运行,即使我创建了两个XPC连接。有没有办法让它运行另一个实例?
发布于 2012-12-26 07:32:05
我相信XPC服务是为每个多个连接设计的一个实例。也许,使用一个正在运行的可执行文件来管理命名管道更方便。因此,最有可能的是不可能同时创建多个实例。
发布于 2014-04-14 13:28:17
有点晚了,但是xpcservice.plist 命令页给出了这个问题的明确答案。
ServiceType (默认:应用程序) XPC服务的类型指定如何实例化服务。这些价值是: 应用程序:每个应用程序都有此服务的唯一实例。 ·用户:为每个用户创建的服务流程有一个实例。 系统:整个系统有一个服务流程实例。System服务仅限于驻留在系统框架中,必须由root拥有。
一句话:在大多数情况下,XPC服务只有一个实例,而且只有在不同的应用程序可以连接到同一服务的情况下(甚至当服务与应用程序捆绑在一起时也不可能),才会有多个实例(每个应用程序一个实例)。
发布于 2013-05-06 19:43:11
由于XPC服务不应该有状态,所以无论是否运行一个或多个实例,都不重要:
XPC服务由launchd管理,launchd按需启动它们,在崩溃时重新启动它们,并在空闲时终止它们(通过发送
SIGKILL)。对于使用服务的应用程序来说,这是透明的,除非服务在处理需要响应的消息时崩溃。在这种情况下,应用程序可以看到它的XPC连接已经失效,直到launchd重新启动服务。因为XPC服务可以在任何时候突然终止,所以它必须设计为保持最低状态--理想情况下,您的服务应该是完全无状态的,尽管这并不总是可能的。
-超临界创建XPC服务
将所有必要的状态信息放入xpc调用中,如果必须持久化,则将其传递回客户端。
https://stackoverflow.com/questions/14035754
复制相似问题