您的问题似乎没有要求正确处理助手的任何崩溃。相反,您似乎只需要一种方法来正确地告诉助手终止自身。如果这是正确的,那么请继续阅读以获得解决方案。至少如果你问了三年后还需要一个……</p>
您没有指定要使用的语言,所以请注意我的示例是用 Swift 编写的。
作为 NSXPCConnection 的一部分,您必须定义用于在应用程序和帮助程序之间共享信息的协议。在此协议中,您可以添加一个带有签名和内容的简单函数,如下所示:
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 连接。但是,无论是挂起还是使连接无效,都不会向助手发送任何类型的消息。助手本身将简单地看到连接被挂起或失效,而不知道任何原因。
希望这至少能让您了解如何处理您的问题。