我编写了一个小的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/

10-14 19:04
查看更多