我想监控整个系统的 FAN_OPEN_PERM | FAN_CLOSE_WRITE 事件由多线程程序执行,并忽略某些目录(例如 /home/mydir)。我在 main() 中使用了 fanotify_init() 和 fanotify_mark() 作为:
//有没有办法使用FAN_GLOBAL_LISTENER?
fd = fanotify_init(FAN_CLOEXEC| FAN_NONBLOCK | FAN_CLASS_CONTENT | FAN_UNLIMITED_QUEUE | FAN_UNLIMITED_MARKS, O_RDONLY | O_LARGEFILE) ...
//标记“/”(不能作为多线程程序工作)或“/home”(工作正常)
fanotify_mark(fd, FAN_MARK_ADD | FAN_MARK_MOUNT, FAN_OPEN_PERM | FAN_CLOSE_WRITE | FAN_EVENT_ON_CHILD, AT_FDCWD, "/") ....
//现在,忽略目录
fanotify_mark(fd, FAN_MARK_ADD | FAN_MARK_ONLYDIR | FAN_MARK_IGNORED_MASK | FAN_MARK_IGNORED_SURV_MODIFY, FAN_OPEN_PERM | FAN_CLOSE_WRITE | FAN_EVENT_ON_CHILD, AT_FDCWD, "/home/mydir")
在我的程序中, main() 读取事件并将其传递给多个线程以进一步处理。
问题: 1) 在监控“/”的情况下,这个多线程程序的系统挂起,但对“/home”工作正常。2)我仍然收到“/home/mydir”的通知(标记为“/home”并忽略“/home/mydir”)。
如何用多线程程序标记整个系统没有任何问题?
如何使用忽略掩码忽略整个目录(递归)?(内核 2.6.38-8-generic)