tail -f总是使用inotify吗?

Kev*_*ree 6 linux tail

我正在使用tail -f(在Linux上)并试图找出如何使用-s参数来设置轮询间隔.一位同事告诉我-s0会导致尾部使用inotify而不是轮询,但我在尾部的文档中找不到.

我拖尾的二进制文件经常变化 - 这是否表明我应该使用-s0或者一小部分秒(比如-s0.1)?

Cha*_*ffy 5

不,tail -f并不总是使用inotify.

inotify并不总是可用。即使您的内核支持它,也只有有限数量的句柄可用于使用 inotify 监视文件,并且它们可能在其他地方使用。此外,如果传递到的名称列表中的任何文件tail不在本地文件系统上,则将无条件使用轮询。

这里明智的做法是相信维护人员已经配置了默认行为,可以适当调整以实现效率和性能的合理平衡,并避免事后猜测。更是如此,因为(缺乏关于行为的明确记录的语义-s 0)我们在这里给出的任何建议都可能在未来的版本中变得过时。


无论如何:如果您的系统确实支持 inotify,您将看到比默认的一秒轮询周期更低的延迟,开箱即用,无需调整或非默认选项。

查看使用 inotify 的实际延迟循环tail -f;您将看到传递的时间-s作为 select() 调用的超时给出,但只有当 inotify 在此之前没有返回任何事件时才会达到此超时。