终止启动启动的特权助手

时间:2012-12-02 18:14:00

标签: launchd xpc

我的应用程序(Cocoa)包含一个使用SMJobBless安装的特权帮助工具(C),模仿Nathan de Vries的SMJobBlessXPC sample code。它成功启动了与其导出的Mach XPC连接的连接尝试。到目前为止一切都很好。

我无法弄清楚的是如何在以后终止该过程。当我的应用程序终止时,帮助工具不再运行业务 - 实际上,显式不应该再次运行。但是,我无法弄清楚如何退出它。

从处理程序中为XPC事件调用exit(0)似乎没有任何效果,可能是因为文档声明exit终止当前的线程,而不是进程。我的main函数如下所示:

int main(int argc, const char * argv[])
{
    // setup a Mach XPC service so that we can receive communication from the app
    xpc_connection_t service = xpc_connection_create_mach_service("com.my.service.name", dispatch_get_main_queue(), XPC_CONNECTION_MACH_SERVICE_LISTENER);
    xpc_connection_set_event_handler(service, ^(xpc_object_t connection){
        handle_xpc_connection(connection);
    });

    xpc_connection_resume(service);

    dispatch_main();

    xpc_release(service);
    return 0;
}

我知道dispatch_main永远不会返回,所以这可能与它有关,但必须有一些方法让进程正常退出。我是否需要切换到使用CFRunLoop

作为必然结果,我如何确保进程不会过早终止?辅助工具或主应用程序将准确知道何时终止正确的时间。一旦工作开始,它会继续运行直到工作终止吗?我对launchd的生命周期管理有点模糊,而且launchd.plist(5)之外的文档记录不完善(我能找到)。

0 个答案:

没有答案