我编写了一个小的python脚本,作为LaunchDaemon运行,用于记录远程数据库的启动/关闭时间。当脚本启动时,它记录启动时间,然后暂停并等待捕捉SIGTERM以记录关闭时间。一个几乎完全相同的工作流被用作登录/注销时间的启动代理。在
然而,苹果的突然终止机制似乎给事情带来了麻烦。当机器关闭或重新启动时,launchd
只向启动守护进程和启动代理发送一个SIGKILL
信号,这是无法处理的。我可能在技术上是错的,但这正是我所经历的。。在
使用launchctl手动加载/卸载守护进程会触发SIGTERM
处理程序。但是,当实际系统关闭时,不会触发相同的代码。在
有人有关于如何防止SIGKILL
的建议吗?在
如果我读的是this对的话,它不应该在守护进程上使用突然终止,除非在启动plist中有
<key>EnableTransactions</key><true/>
。但是文档有点模糊,所以我也尝试在plist中添加<key>EnableTransactions</key><false/>
,或者如果这不起作用,请从程序调用vproc_transaction_begin(我假设您可以从python调用它,但我不知道机制)。在相关问题 更多 >
编程相关推荐