我想监视目录中的每个文件更改inotifywait。inotifywait应写入 FIFO 缓冲区,然后可以悠闲地读取该缓冲区。在试验相对大量的事件时,我遇到了一些瓶颈,我想了解一下。
变化总是由 引起的touch {0000..9999}testfile。瓶颈的形式是无法捕获所有文件事件。
当我将inotifywait的输出重定向到文件时,所有内容都会按原样记录。
inotifywait -q -m ./写入终端会捕获大约 5000 到 8000 个文件的 CREATE、OPEN、ATTRIB、CLOSE。我猜“写入屏幕”的速度不够快,无法实现非阻塞?
如果我使用管道cat( inotifywait... | cat | ... | cat),我最终会在某个时候得到它们。所以我猜管道是一种缓冲,但我真的不明白这是如何工作的,甚至不知道要查找什么。有人可以解释一下吗?
我还使用了我在这里找到的“解决方案”。使用pv -q -B 1g作为缓冲液(还buffer)。
inotifywait -q -m ./ | BUFFER | \
while read line; do
# Do something with $line or ...
sleep 1
done
Run Code Online (Sandbox Code Playgroud)
如何确保可以处理每个文件事件?我有一种感觉,我关于 bash voodoo 的小游戏发现了一些更深层次的限制,我想在那里有更多的见解。