当其他程序正在使用某个文件时,对其使用 wc

当其他程序正在使用某个文件时,对其使用 wc

我正在生成一个文本文件,最终将包含大约十亿个条目。该文件由一个每隔几秒钟写入一次的程序生成。为此,它总是打开文件然后关闭它,因此文件不会一直以写入模式打开。由于整个过程需要很长时间,我想执行“wc -l <​​ file_name”来查看已经有多少条目(一个条目 = 一行)。

但我想知道这是不是一个坏主意?由于 wc 需要几分钟来计算所有行数,因此它会在我的程序写入文件时读取文件。我不在乎 wc 计算的行数和实际行数之间是否存在细微差异。我更担心我的程序无法将数据写入文件。

这会发生在我的 Linux 系统上吗?

答案1

这通常是通过. 有两种在 Linux 中,是建议性的和强制性的。

咨询锁需要竞争进程之间的合作,IE,即每个进程首先检查文件上是否存在锁,然后根据锁的存在(=等待)或不存在(=读/写)采取行动。强制锁定则赋予一个进程禁止其他进程对锁定文件采取行动的权限。

你没有说明哪种进程正在写入你的大文件,所以我不知道这两种选择中哪一种最合适。我可能会建议一个很好的介绍由于缺乏更多信息,因此无法回到主题。

答案2

我不是文件句柄管理细节方面的专家,但我一眼就看出这里不存在问题。只要 programA 是写作并且程序B是阅读,应该没有问题。

虽然输出结果可能不一致wc,但我不明白为什么只因为读取了文件就损坏了写入文件的数据。如果你有两个程序写作对于同一个文件,情况就不同了。

因此,锁确实是处理重叠文件访问的最佳方式,但如果您所做的只是用来监控进度,则不需要它们wc。我已经做了数千次同样的事情,没有问题。但是,您可以考虑在脚本中添加一个打印到标准错误的进度计,或者tail -f在生成的文件上使用。

相关内容