我有一个以root身份运行的应用程序(一个守护进程/ Library/StartupItems),它偶尔会启动另一个进程system("open /Applications/MyAppName.app").这工作正常,但在某些计算机上,MyAppName以root身份启动,而不是在当前用户下运行.
我试图弄清楚为什么会这样,以及如何让应用程序始终作为当前用户启动.
问题似乎发生在运行某些Open/Active目录组合的企业站点上.我对这些机器的访问有限,所以在我请求更多时间之前,我试图至少形成一些假设.
另外一条线索是,如果你打开活动监视器并检查"Finder"进程,至少有一台计算机,"用户:"部分显示用户名但没有用户ID("(UID)"部分完全缺失了).
此外,父流程显示为" launchd (1)"而不是launchd (95)像大多数标准应用程序那样" ".我认为这个launchd实例是在计算机启动并以root身份运行的第一件事,与其他以登录用户身份运行的launchd实例相比.
除了显而易见的安全问题之外,我还要求应用程序不以root身份运行,以便它可以支持两个同时登录的用户打开/可见的内容.
有没有人对可能导致这种情况的原因有什么看法,或者我怎么解决它?
我有几点意见:
你应该让你的守护进程成为一个合适的launchd守护进程,即将一个plist粘贴在/ Library/LaunchDaemons中./Library/StartupItems已经过时了.请参阅http://developer.apple.com/documentation/MacOSX/Conceptual/BPSystemStartup/BPSystemStartup.html.
您可能不应该直接从您的守护程序启动第二个守护程序.你应该把它变成另一个守护进程.
确保你熟悉这个技术.注意:http://developer.apple.com/technotes/tn2005/tn2083.html.这是必不可少的阅读,并且应该解释为什么有多个启动过程,并且应该为您提供关于您的案例中出现问题的正确线索.
顺便open说一句,它只是Launch Services的包装器,您可以直接访问,而不是调用system.但是,正如我所说,您不应该使用open或启动服务启动第二个守护程序.
如果您可以发布有关您守护进程的确切内容的更多详细信息,我们可能会就最佳方式向您提供建议.例如,通常最好按需启动启动守护程序,而不是让它们连续运行.
| 归档时间: |
|
| 查看次数: |
271 次 |
| 最近记录: |