Cocoa 调用系统(“open<;app name.app>;”有时会导致以root用户身份启动app
我有一个应用程序(确切地说是/Library/StartupItems中的守护进程)以root用户身份运行,它偶尔会使用Cocoa 调用系统(“open<;app name.app>;”有时会导致以root用户身份启动app,cocoa,launchd,Cocoa,Launchd,我有一个应用程序(确切地说是/Library/StartupItems中的守护进程)以root用户身份运行,它偶尔会使用system(“open/Applications/MyAppName.app”)启动另一个进程。这很好,只是在某些计算机上,MyAppName以root用户身份启动,而不是以当前用户的身份启动 我试图弄清楚为什么会这样,以及如何让应用程序始终以当前用户的身份启动 这个问题似乎发生在运行某种Open/Active directory组合的企业站点上。我对这些机器的访问有点有限,
system(“open/Applications/MyAppName.app”)
启动另一个进程。这很好,只是在某些计算机上,MyAppName以root用户身份启动,而不是以当前用户的身份启动
我试图弄清楚为什么会这样,以及如何让应用程序始终以当前用户的身份启动
这个问题似乎发生在运行某种Open/Active directory组合的企业站点上。我对这些机器的访问有点有限,所以在我要求更多的时间使用它们之前,我试图至少形成一些假设
我得到的另一个线索是,在至少一台这样的计算机上,如果打开活动监视器并检查“查找器”进程,“用户:”部分显示用户名,但没有用户id(“UID”部分完全丢失)
此外,与大多数标准应用程序一样,父进程显示为“launchd(1)
”而不是“launchd(95)
”。我相信这个launchd实例是在计算机启动并以root用户身份运行时首先启动的运行,而另一个launchd实例是以登录用户身份运行的
除了明显的安全问题外,我还需要应用程序不要以root用户身份运行,这样它就可以支持诸如对两个同时登录的用户开放/可见之类的功能
有没有人知道是什么原因导致了这一问题,或者我如何着手解决这一问题?我有几点意见:
open
只是启动服务的包装,您可以直接访问这些服务,而不是调用system
。但是,正如我所说,您不应该使用open
或启动服务启动第二个守护进程如果你能发布更多关于你的守护进程到底做什么的详细信息,我们可能会给你关于最好的方法的建议。例如,最好按需启动启动启动守护程序,而不是让它们连续运行。我有几点意见:
open
只是启动服务的包装,您可以直接访问这些服务,而不是调用system
。但是,正如我所说,您不应该使用open
或启动服务启动第二个守护进程如果你能发布更多关于你的守护进程到底做什么的详细信息,我们可能会给你关于最好的方法的建议。例如,通常最好按需启动启动启动守护程序,而不是让它们连续运行。谢谢,这是一个很大的帮助。我的第二个应用程序确实改用了用户代理守护程序。谢谢,这帮了我不少忙。我确实已经切换到为我的第二个应用程序使用用户代理守护程序。