gpt4 book ai didi

macos - 如何终止/重置捆绑 XPC 助手?

转载 作者:行者123 更新时间:2023-12-04 19:30:08 33 4
gpt4 key购买 nike

有谁知道如何终止或重置 XPC 助手?
根据 Apple 文档,launchd 会在 XPC 助手崩溃时处理它。但是,如果您需要中断或取消正在运行的助手,则没有指示该怎么做。

例如,如果我有一个正在渲染 32 位 QuickTime 电影的 XPC 客户端,我如何让我的 64 位“父”应用程序向 XPC 助手发出信号以取消作业并进行清理?

此外,XPC 助手应用程序处理具有“退出”的父级的正确方法是什么?

目前,要在父应用程序端终止,我正在使用(NSXPCConnection):

  • (无效)暂停
  • (void) 无效

  • 这些似乎关闭了连接。但我没有看到任何证据表明助手应用程序正在关注。

    提前致谢!

    最佳答案

    您的问题似乎没有要求正确处理助手的任何崩溃。相反,您似乎只需要一种方法来正确地告诉助手终止自身。如果这是正确的,那么请继续阅读以获得解决方案。至少如果你问了三年后还需要一个……

    您没有指定要使用的语言,所以请注意我的示例是用 Swift 编写的。

    作为 NSXPCConnection 的一部分,您必须定义用于在应用程序和帮助程序之间共享信息的协议(protocol)。在此协议(protocol)中,您可以添加一个带有签名和内容的简单函数,如下所示:

    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 连接。但是,无论是挂起还是使连接无效,都不会向助手发送任何类型的消息。助手本身只会看到连接被挂起或失效,而不知道原因。

    希望这至少能让您了解如何处理您的问题。

    关于macos - 如何终止/重置捆绑 XPC 助手?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26505983/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com