Macos 为什么我的守护进程(在root下)在注销或以其他用户身份登录时关闭?

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

我开发了一个后台程序,它使用“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.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;更具体地说,它不允许连接到窗口服务器。”