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