有谁知道如何终止或重置 XPC 助手?根据 Apple 文档,launchd 会在 XPC 助手崩溃时对其进行处理。但是,如果您需要中断或取消正在运行的助手,则没有指示该怎么做。
例如,如果我有一个正在渲染 32 位 QuickTime 影片的 XPC 客户端,我如何让我的 64 位“父”应用程序向 XPC 助手发出信号以取消作业并进行清理?
另外,XPC 帮助程序应用程序处理“退出”的父级的正确方法是什么?
目前,要在父应用程序端终止,我正在使用 (NSXPCConnection):
这些似乎关闭了连接。但我没有看到任何证据表明帮助应用程序正在关注。
提前致谢!
您的问题似乎并不要求正确处理助手的任何崩溃。相反,您似乎只需要一种方法来正确地告诉助手终止自身。如果这是正确的,请继续阅读以获取解决方案。至少如果你在询问三年后仍然需要一个\xe2\x80\xa6
\n您没有\xe2\x80\x99t 指定要使用的语言,因此请注意我的示例是用 Swift 编写的。
\n作为“NSXPCConnection”的一部分,您必须定义一个协议,用于应用程序和助手之间的信息共享。在此协议中,您可以添加一个简单的函数,如下所示:
\nterminateHelper(withReply reply: (String) -> Void) {\n reply("Terminating Helper.")\n exit(0)\n}\nRun Code Online (Sandbox Code Playgroud)\n该函数使用提供的闭包将消息字符串报告回主应用程序,然后使用exit系统调用终止自身。
从您的主应用程序中,您可以像这样调用此函数:
\nif let helper = helperConnection.remoteObjectProxyWithErrorHandler({ (error) in\n let e = error as NSError\n print("Helper communication failed. Remote proxy error \\(e.code): \\(e.localizedDescription) \\(e.localizedRecoverySuggestion ?? "---")")\n}) as? HelperProtocol {\n helper.terminateHelper(withReply: { (replyString) in\n print(replyString)\n })\n}\nRun Code Online (Sandbox Code Playgroud)\n
请注意,这launchd将立即重新启动已终止的帮助程序应用程序,尽管它并未\xe2\x80\x99t 崩溃,而是被正常终止。但是,这将保证帮助程序返回到初始化状态,并且所有先前的帮助程序处理都会停止。
如果您暂停或使您提出问题的方式无效,那么您只是取消了 XPC 连接。但是,无论是暂停连接还是使连接无效,都不会向帮助程序发送任何类型的消息。助手本身只会看到连接被挂起或失效,而不知道任何原因。
\n希望这至少能让您了解如何处理您的问题。
\n| 归档时间: |
|
| 查看次数: |
1631 次 |
| 最近记录: |