使用 poll 或 select 监控 proc 挂载

monitoring proc mounts using poll or select

我正在尝试编写一个脚本来监视 /proc/mounts 并在检测到只读文件系统时通知回来。

在python中,一种方法是将/proc/mounts的值存储在一个列表中,并在循环中继续执行cat /proc/mounts并直接检查“ro”实体。但我想使用 poll 或 select 而不是这个,因为它很有效并且只在事件发生时才起作用。

我发现投票比 select 更可取。据我了解,我们可以将 exceptfds 中 /proc/mounts 的 fd 放到 select 中,当有异常时我们会收到通知(请在这里纠正我,行的变化被表示为异常?)。只是为了测试,我正在常规文件上尝试它 - 现在,当我打开并更改 e.txt 时,是否期望此文件将打印整个文件?目前,它没有。我错过了什么?

import select

f = open("e.txt")
while True:
    r,w,x = select.select([],[],[f])
    f.seek(0)
    print f.read()
    < check for ro entity and do further>

对于/proc/mounts监控:

import select

f = open("/proc/mounts")
while True:
    r,w,x = select.select([],[],[f])
    f.seek(0)
    print f.read()
    < check for ro entity and do further>

如何使用 select 或轮询来实现此目的。

这确实适用于 /proc/mounts 监控。对行的任何更改都被视为异常,因此将 /proc/mounts 的 fd 添加到 exceptfds(这是 select.select([],[],[f]) 的 select 中的第三个参数)

import select

f = open("e.txt")
while True:
    r,w,x = select.select([],[],[f])
    f.seek(0)
    print f.read()