Macos 为什么我的守护进程(在root下)在注销或以其他用户身份登录时关闭?
我开发了一个后台程序,它使用“launchctl”在root下运行。但是,在我注销并切换到另一个用户后,它会停止并在root下启动一个新实例。我需要它只在OSX启动时启动一次 以下是我使用的plist文件:Macos 为什么我的守护进程(在root下)在注销或以其他用户身份登录时关闭?,macos,daemon,user-agent,launchd,Macos,Daemon,User Agent,Launchd,我开发了一个后台程序,它使用“launchctl”在root下运行。但是,在我注销并切换到另一个用户后,它会停止并在root下启动一个新实例。我需要它只在OSX启动时启动一次 以下是我使用的plist文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.d
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>UserName</key>
<string>root</string>
<key>WaitForDebugger</key>
<false/>
<key>RunAtLoad</key>
<true/>
<key>EnableTransactions</key>
<false/>
<key>StandardErrorPath</key>
<string>/usr/local/mylogs/mylogs.log</string>
<key>StandardOutPath</key>
<string>/usr/local/mylogs/mylogs.log</string>
<key>Label</key>
<string>com.daemon.mydaemon</string>
<key>ProgramArguments</key>
<array>
<string>/Applications/MyDaemon.app/Contents/MacOS/MyDaemon</string>
</array>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
用户名
根
韦特福德布格
运行负荷
启用事务
标准错误路径
/usr/local/mylogs/mylogs.log
标准门诊
/usr/local/mylogs/mylogs.log
标签
com.daemon.mydaemon
程序参数
/Applications/MyDaemon.app/Contents/MacOS/MyDaemon
持久连接
我使用以下命令启动了守护进程:
sudo launchctl/System/Library/LaunchDaemons/com.daemon.mydaemon.plist
或
sudo launchctl/Library/LaunchDaemons/com.daemon.mydaemon.plist
同样在切换到另一个用户后,我收到一个错误,守护进程停止工作,但我在活动监视器中看到
_RegisterApplication()未能建立到Windows服务器的默认连接,_CGSDefaultConnection()为空
恐怕没有什么突出的,这看起来是对的。您确定守护进程退出是因为您正在注销,而不是因为其他一些偶然的原因(想不出是什么原因)?小点:(i)这就是您正在使用的
launchctl-load
,是吗?(您的示例省略了加载);(ii)不要把东西放在/System/Library
中,因为在系统升级时它们可能会在没有警告的情况下被踩踏(/Library
可以)。我尝试了这两种情况。结果是一样的。还收到一个错误:_RegisterApplication(),未能建立到Windows服务器的默认连接,_CGSDefaultConnection()为空。您的守护进程是否可能与一个非守护进程安全框架(Cocoa、CoreVideo等)相链接?有关完整列表,请参阅上的“框架交叉引用”部分。根据列表,我使用的Cocoa.Framework不是守护程序安全的。但是如果没有它,我会有很多错误…@Sergio:在这种情况下,你写的是代理,而不是守护进程。守护进程没有GUI,代理可能有GUI。从上面的TN中可以看出:“守护进程不能显示任何GUI;更具体地说,它不允许连接到窗口服务器。”