2009-07-06 27 views
0

我有一个以root身份运行的应用程序(守护程序内部/ Library/StartupItems是精确的),偶尔会启动另一个进程使用system("open /Applications/MyAppName.app")。这可以正常工作,只是在某些计算机上,MyAppName以root用户身份启动,而不是在当前用户下运行。调用系统(“open <app name.app>”)有时会导致应用程序以根用户身份启动

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

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

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

而且,像大多数标准应用程序一样,父进程显示为“launchd (1)”而非“launchd (95)”。我相信这个launchd实例是在计算机启动并以root用户运行时第一个启动的运行,与以登录用户身份运行的其他launchd实例相比较。

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

有没有人有什么想法可能会导致这个或我可能会如何解决它?

回答

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只是一个可以直接访问的启动服务的包装,而不是调用system。但是,正如我所说的,您不应该使用open或启动服务启动第二个守护进程。

如果你可以发布关于它到底是什么你的守护进程做更多的细节,我们也许能够给你的建议,以做到这一点的最好办法。例如,最好让启动后台程序按需启动,而不是让它们连续运行。

+0

谢谢,这是相当多的帮助。我已经切换到为我的第二个应用程序使用用户代理守护进程。 – 2009-07-07 23:27:09

相关问题