0

我有一个应用程序(准确地说是 /Library/StartupItems 中的一个守护进程)以 root 身份运行,它偶尔会使用system("open /Applications/MyAppName.app"). 这工作正常,除了在某些计算机上 MyAppName 以 root 身份启动,而不是在当前用户下运行。

我试图弄清楚为什么会这样,以及如何让应用程序始终以当前用户身份启动。

该问题似乎出现在运行某种 Open/Active Directory 组合的企业站点上。我对这些机器的访问有些有限,所以在我请求更多时间之前,我试图至少形成一些假设。

我的另一个线索是,如果您打开活动监视器并检查“Finder”进程,至少在其中一台计算机上,“用户:”部分显示用户名但没有用户 ID(“(UID)”部分完全不见了)。

此外,父进程显示为“ launchd (1)”,而不是launchd (95)像大多数标准应用程序那样显示为“”。与以登录用户身份运行的另一个 launchd 实例相比,我相信这个 launchd 实例是每次计算机启动并以 root 身份运行时首先启动的运行。

除了明显的安全问题外,我还需要应用程序不以 root 身份运行,以便它支持诸如对两个同时登录的用户开放/可见的功能。

有人对可能导致此问题的原因或我如何解决此问题有任何想法吗?

4

1 回答 1

5

我有几点意见:

  1. 你应该让你的守护进程成为一个合适的launchd 守护进程,即在/Library/LaunchDaemons 中粘贴一个plist。/Library/StartupItems已过时。请参阅http://developer.apple.com/documentation/MacOSX/Conceptual/BPSystemStartup/BPSystemStartup.html

  2. 您可能不应该直接从您的守护程序启动第二个守护程序。你可能应该让它成为另一个守护进程。

  3. 确保您熟悉这项技术。注意: http: //developer.apple.com/technotes/tn2005/tn2083.html。这是必不可少的阅读材料,应该解释为什么有多个启动过程,并且应该为您提供关于您的案例出了什么问题的体面线索。

  4. 顺便说一句,open它只是 Launch Services 的一个包装器,您可以直接访问它,而不是调用system. 但是,正如我所说,您不应该使用openLaunch Services 来启动您的第二个守护程序。

如果您可以发布更多关于您的守护进程具体做什么的详细信息,我们或许可以为您提供最佳方法的建议。例如,最好让您的启动守护程序按需启动,而不是让它们连续运行。

于 2009-07-07T00:18:28.143 回答