LaunchDaemon处理系统关闭 - 没有SIGTERM?

时间:2011-11-23 20:52:45

标签: python macos launchd

我编写了一个小的python脚本,我作为LaunchDaemon运行,用于记录远程数据库的启动/关闭时间。当脚本启动时,它会记录启动时间,然后暂停并等待捕获SIGTERM以记录关闭时间。几乎完全相同的工作流程用作登录/注销时间的LaunchAgent。

然而,Apple的突然终止机制似乎正在扼杀事物。当机器关闭或重新启动时,launchd仅向启动守护程序和启动程序发送SIGKILL信号,而这些信号无法处理。我在技术方面可能是错的,但这基本上就是我所经历的......

使用launchctl手动加载/卸载守护程序会触发SIGTERM处理程序。但是,当发生实际系统关闭时,不会触发相同的代码。

是否有人建议如何阻止SIGKILL

1 个答案:

答案 0 :(得分:4)

如果我正确地阅读this,除非你在启动plist中有<key>EnableTransactions</key><true/>,否则它不应该在守护进程上使用突然终止。但是文档有点模糊,所以我也尝试将<key>EnableTransactions</key><false/>添加到plist中,或者如果这不起作用,请从程序中调用vproc_transaction_begin(我假设你可以从python中调用它,但我不是'我知道机制。)