2

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

然而,苹果的突然终止机制似乎正在给事情带来麻烦。似乎当机器关闭或重新启动时,launchd只是向启动SIGKILL守护进程和启动代理发送信号,这是无法处理的。我可能在技术上是错误的,但这基本上就是我正在经历的......

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

有没有人有关于如何预防的建议SIGKILL

4

1 回答 1

5

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

于 2011-11-23T23:00:43.247 回答