找出通过SMJobSubmit运行的特权帮助的返回码

时间:2012-09-19 15:34:07

标签: objective-c macos launchd

有没有办法知道当特权助手工具作为launchdaemon安装并通过SMJobSubmit()启动时执行的进程的返回代码或进程ID。

我有一个以特权方式执行某些任务的应用程序使用了here提到的SMJobSubmit API。

现在为了知道任务是否成功,我将不得不做以下其中一项。

  1. 最好的选择是获取运行的可执行文件的返回码。
  2. 另一种选择是如果我可以在我的应用程序和launchd之间创建一个管道。
  3. 如果以上两个都不可能,我将不得不诉诸一些黑客,比如在/ tmp位置写一个文件并从我的应用程序中读取它。
  4. 我猜SMJobSubmit在内部将带有launchdaemon字典的可执行文件提交给launchd,然后由launchd执行。那么有没有办法可以查询launchd,找出标签为“mylabel”的可执行文件的返回代码。

1 个答案:

答案 0 :(得分:1)

没有办法直接这样做。

SMJobSubmit是一个复杂任务的简单包装器。尽管异步启动任务,它也会同步返回。因此,如果它无法提交作业,它会给你一个错误,如果它成功提交了一个无法运行的作业,那么就无法找到它。

因此,您必须明确编写一些代码,以便从您的帮助程序与您的应用程序进行通信,以报告它已启动并正在运行。

如果您已经构建了一些通信机制(信号,文件,Unix或TCP套接字,基于HTTP的JSON-RPC,无论如何),只需使用它。

如果您从头开始设计某些东西,XPC可能是最好的答案。您无法使用XPC启动助手(因为它具有特权),但您可以通过注册Mach服务并调用xpc_connection_create_mach_service来手动创建连接。