“launchctl start”无法在启动守护进程中运行

时间:2011-10-15 15:10:13

标签: cocoa launchd

我有一个守护进程,在Mac上使用launchd进行设置。守护程序以root身份运行。以下行不会启动我的UI应用程序 -

system("launchctl start com.project.myproj");

但是如果我去终端并运行相同的命令 - > launchctl start com.project.myproj。它启动了我的应用程序。我的问题是我做错了什么还是系统行为不正确?

1 个答案:

答案 0 :(得分:0)

问题是系统启动的启动守护程序无法访问Aqua,因此您的守护程序进程无法访问桌面环境。

Apple的Technical Note TN2083: Daemons and Agents描述了其中的一些内容。 (见this section on launchd agents。)

有人问similar question about accessing the Aqua environment from an SSH connection

我猜你需要重新设计你的应用程序:

  1. 创建一个在每个用户的Aqua会话中运行的启动代理。
  2. 让代理连接到根守护程序,或让根守护程序查找启动代理的实例。
  3. 当根守护程序发出信号时,让启动代理程序启动应用程序的图形部分。