小编Igo*_*shi的帖子

了解inotifywait、管道和缓冲区

我想监视目录中的每个文件更改inotifywaitinotifywait应写入 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 的小游戏发现了一些更深层次的限制,我想在那里有更多的见解。

bash pipe buffer inotify

8
推荐指数
1
解决办法
1113
查看次数

标签 统计

bash ×1

buffer ×1

inotify ×1

pipe ×1