linux - tail -f 总是使用 inotify 吗?

标签 linux tail

我正在使用 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/

相关文章:

linux - 在 RPM 中创建符号链接(symbolic link)

linux - 检测读取器何时关闭命名管道 (FIFO)

Android aFreeRDP cmake 构建失败

linux - 如何杀死使用nodejs ssh2执行的尾部进程?

python-2.7 - Python 2.7 默认情况下是否将错误写入日志文件?

c - 二进制 "tail"一个文件

linux - 并行计算 : how to share computing resources among users?

android - 在 Python 和 Kivy 中使用 buildozer 时出现错误 "Unable to find Compiler"

shell - 如何获取文件的最后几行(前 20 行除外)?

list - 用Erlang从列表中拆分几个头的最佳方法?