Inotify
為什麼 inotifywait 不報告對電池容量文件所做的修改?
我想知道我的電池電量何時發生變化,我不想簡單地執行一個每五秒鐘檢查一次的守護程序。
我試過 running
inotifywait -m /sys/class/power_supply/BAT1/capacity
,但它沒有註冊任何修改,即使cat
-ing 每隔一段時間會給出不同的結果!事實上,它只在我使用cat
它時報告一些東西,或者執行acpi
. 我還嘗試inotifywait
在 BAT1 目錄中的其他文件上執行,發現沒有看到任何修改 - 儘管使用cat
.那麼為什麼不
inotifywait
報告修改呢?如果我不能使用 inotify,如何獲得電池電量變化的即時更新?
正如@rudib 在評論中所說,其中的所有
/sys
內容都是虛擬的:每個文件的內容都是在實際讀取時從相應的核心資料結構中新鮮創建的。因此,在將某些內容寫入文件以更改它的意義上,沒有任何修改。也是如此
/proc
。電池狀態通知以通用 Netlink 消息的形式提供,帶有 family name =
acpi_event
和多播組名稱acpi_mc_group
。不幸的是,我不知道有什麼工具可以輕鬆訪問 shell 腳本的 Netlink 消息,但顯然該pyroute2
工具還可以解碼包含 ACPI 事件的 netlink 消息,因此它可能作為 Python 程式碼範例很有用。