我正在使用 tail -f(在 Linux 上)并试图弄清楚我应该如何使用 -s 参数来设置轮询间隔。一位同事告诉我 -s0 会导致 tail 使用 inotify 而不是轮询,但我在 tail 的文档中找不到它。
我跟踪的二进制文件不断变化 - 这是否表明我应该使用 -s0 或几分之一秒(如 -s0.1)?
最佳答案
不,tail -f
并不总是使用 inotify
。
inotify
并不总是可用。即使您的内核支持它,也只有有限数量的句柄可用于使用 inotify 监视文件,并且它们可能在其他地方使用。此外,如果传递给 tail
的名称列表中的任何文件不在本地文件系统上,将无条件地使用轮询。
此处明智的做法是相信维护者已配置默认行为以适当调整以实现效率和性能的合理平衡,并避免事后猜测。这是双重的,因为(缺乏关于 -s 0
行为的明确记录的语义)我们在这里提供的任何建议在未来的版本中可能会过时。
无论如何:如果您的系统确实支持 inotify,您将看到比默认的一秒轮询周期建议的延迟更低的开箱即用,无需调整或非默认选项.
参见 the actual delay loop used for tail -f
with inotify available ;您会看到通过 -s
传递的时间作为 select() 调用的超时时间给出,但只有在 inotify 在此之前不返回任何事件时才会达到此超时时间。
关于linux - tail -f 总是使用 inotify 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31686130/