为什么 inotifywait 不报告对电池容量文件所做的修改?

为什么 inotifywait 不报告对电池容量文件所做的修改?

我想知道我的电池电量何时发生变化,并且我不想简单地运行一个每五秒检查一次的守护程序。

我尝试过运行inotifywait -m /sys/class/power_supply/BAT1/capacity,但它没有注册任何修改,尽管cat每隔一段时间运行它会给出不同的结果!事实上,它只在我使用cat它或运行时报告一些内容acpi。我还尝试inotifywait在 BAT1 目录中的其他文件上运行,发现没有人对任何文件进行修改 - 尽管给出了新的结果cat

那么为什么不inotifywait报告修改呢?如果我无法使用 inotify,如何才能获得有关电池电量变化的即时更新?

答案1

正如 @rudib 在评论中所说,其中的所有内容/sys都是虚拟的:每个文件的内容都是在实际读取时从相应的内核数据结构中重新创建的。因此,从写入文件来更改文件的意义上来说,没有任何修改。

也同样如此/proc

电池状态通知可作为通用 Netlink 消息,带有家族名称 =acpi_event和多播组名称acpi_mc_group。不幸的是,我不知道有什么工具可以轻松访问 shell 脚本的 Netlink 消息,但显然pyroute2该工具还可以解码包含 ACPI 事件的 netlink 消息,因此它可能作为 Python 代码示例很有用。

相关内容