“launchctl开始”不在启动守护进程中工作

发布于 2024-12-10 15:15:31 字数 240 浏览 2 评论 0原文

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

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

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

I have a daemon process, set up using launchd on Mac. The daemon is running as root. The following line does not launch my UI application -

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

But if I go to the terminal and run the same command -> launchctl start com.project.myproj. It launches my application. My question is am i doing something wrong or is system not behaving correctly ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

屋檐 2024-12-17 15:15:31

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

Apple 的技术说明 TN2083:守护进程和代理 描述了其中的一些内容。 (请参阅本节介绍启动代理。)

有人问有关通过 SSH 连接访问 Aqua 环境的类似问题

我猜您需要重新架构您的应用程序:

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

The problem is that launch daemons started by the system don't have access to Aqua, so your daemon process can't access the desktop environment.

Apple's Technical Note TN2083: Daemons and Agents describes some of this. (See this section on launchd agents.)

Someone asked a similar question about accessing the Aqua environment from an SSH connection.

I'm guessing you need to re-architect your application a bit:

  1. Create a launch agent that runs in every user's Aqua session.
  2. Have the agent connect to your root daemon, or have the root daemon look for an instance of the launch agent.
  3. When signaled by the root daemon, have the launch agent launch the graphical part of the application.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文