我编写了一个并行执行命令的脚本。我让他们都向同一个日志文件写入一个条目。顺序错误或条目是否交错都没有关系,但我注意到有些条目丢失了。我可能应该在写入之前锁定文件,但是,如果多个进程同时尝试写入文件,是否会导致条目丢失?
最佳答案
是的,如果不同进程独立打开并写入同一个文件,可能会导致重叠写入和丢失数据。发生这种情况是因为每个进程都将获得自己的文件指针,该指针仅通过本地写入前进。
除了锁定,更好的选择可能是在所有工作进程的祖先中打开日志文件一次,让它跨 fork()
继承,并由它们用于日志记录。这意味着将有一个共享文件指针,当任何进程写入新条目时该指针会前进。
关于unix:我可以在不丢失条目的情况下并行写入同一个文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15384331/