我编写了一个小的Python脚本,将它作为LaunchDaemon运行,以将启动/关闭时间记录到远程数据库中。脚本启动时,它将记录启动时间,然后暂停并等待捕获SIGTERM,以记录关闭时间。几乎相同的工作流程被用作LaunchAgent的登录/注销时间。
但是,看来苹果的“突然终止”机制使事情陷入僵局。看来,当计算机关闭或重新启动时,launchd
仅向启动守护程序和启动代理发送SIGKILL
信号,而无法处理。我在技术上可能是错的,但这基本上就是我所遇到的。
使用launchctl手动加载/卸载守护程序会触发SIGTERM
处理程序。但是,当真正的系统关闭时,不会触发相同的代码。
有人对如何防止SIGKILL
有建议吗?
最佳答案
如果我没看错this,除非您在启动的plist中有<key>EnableTransactions</key><true/>
,否则它不应在守护程序上突然终止。但是文档有点模糊,因此我也尝试将<key>EnableTransactions</key><false/>
添加到plist中,或者如果这不起作用,请从您的程序中调用vproc_transaction_begin(我假设您可以从python调用它,但我不知道机械师)。
关于python - LaunchDaemon处理系统关闭-没有SIGTERM吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8248907/