![为什么拖尾输出日志有时会给出部分行?](https://linux22.com/image/21581/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%8B%96%E5%B0%BE%E8%BE%93%E5%87%BA%E6%97%A5%E5%BF%97%E6%9C%89%E6%97%B6%E4%BC%9A%E7%BB%99%E5%87%BA%E9%83%A8%E5%88%86%E8%A1%8C%EF%BC%9F.png)
有时,跟踪不断更新的输出日志并不能给出整行。这是为什么?
grep pattern input_file > output.log &
tail output.log
为什么它不完整打印最后一行?
答案1
读取和写入文件不是行原子的,也不tail -f
是行缓冲的。因此,当tail -f
在写入文件时读取文件时,在写入文件的进程写入行尾之前,它可能会到达文件末尾(因此停止打印)。当这种情况发生时,它会打印一条不完整的行,因为这就是它看到的全部内容。
有时,跟踪不断更新的输出日志并不能给出整行。这是为什么?
grep pattern input_file > output.log &
tail output.log
为什么它不完整打印最后一行?
读取和写入文件不是行原子的,也不tail -f
是行缓冲的。因此,当tail -f
在写入文件时读取文件时,在写入文件的进程写入行尾之前,它可能会到达文件末尾(因此停止打印)。当这种情况发生时,它会打印一条不完整的行,因为这就是它看到的全部内容。