检测断电

检测断电

是否可以在没有 UPS 的情况下检测笔记本电脑/台式机的断电情况?显然,没有 UPS 的计算机在拔掉插头/取出电池后至少会立即关闭。然而,我认为内核可能会在电容器/电感器完全耗尽之前注意到功率损失,并且有很短的机会做某事。

我知道如果我有一个正确配置的 UPS,powerd将发送SIGPWRinit以便可以进行有组织的关闭。我对没有连接 UPS 的情况感兴趣,所以显然最多有一个非常关闭窗口很短。我真正想要的只是将单个时间戳(或者失败的话,任何字符串)写入日志文件,以便我可以了解电源故障。

我不知何故怀疑这SIGPWR在这种情况下实际上会有帮助,因为我怀疑内核会将其发送到每个进程,这只是我首先想到的事情。也许我可以轮询一些控制行或文件来更新内核?或者也许我只是被搞砸了,说实话,这正是我所期望的。

答案1

对于普通 100W 台式电脑来说,即使是外部 680uFx400V 电容器电池的时间窗口也非常短 - 仅半秒左右。如果使用内部 PSU 上限,则更少。你真正想达到什么目的?即使您能够将时间戳写入日志文件,您仍然需要进行sync()循环或进行手动sync()调用,并且如果您不幸并且您的机器正在忙于转储其他排队的磁盘缓冲区 -你出去了。

如果您需要检测电源故障几乎可靠,那么我建议你在启动时触摸一个标志文件,在正常关机时将其删除。该文件的存在将告诉您机器没有完全关闭(但它不会让您避免其他故障,主要是软件故障,例如内核恐慌)。

答案2

有些机器配备了专为关机而设计的短期电池(至少 AT&T 3B 系列是这样做的,IIRC 一些 IBM RS/6000-pSeries 也是如此)。在这些机器中,SIGPWR信号是在断电时发送的,并且实际上是可用的。这些天没那么多了。

相关内容