在ruby中Fork进程并写入同一文件

在ruby中Fork进程并写入同一文件,ruby,file,process,subprocess,fork,Ruby,File,Process,Subprocess,Fork,有没有办法让fork生成的不同进程在运行时写入同一个文件 感谢forked进程将获得原始文件描述符的副本,因此假设父进程在它forked之前持有一个文件句柄,那么它将“正常工作”,并需要一些小心(与共享一个文件的多个进程非常相似,不过请注意,在fork案例中,底层内核描述符是相同的,因此您的进程将共享诸如当前偏移量之类的内容) require 'tmpdir' filename = Dir::Tmpname.make_tmpname('/tmp/', '') puts filename fi

有没有办法让fork生成的不同进程在运行时写入同一个文件


感谢

fork
ed进程将获得原始文件描述符的副本,因此假设父进程在它
fork
ed之前持有一个文件句柄,那么它将“正常工作”,并需要一些小心(与共享一个文件的多个进程非常相似,不过请注意,在
fork
案例中,底层内核描述符是相同的,因此您的进程将共享诸如当前偏移量之类的内容)

require 'tmpdir'

filename = Dir::Tmpname.make_tmpname('/tmp/', '')
puts filename

file = File.open(filename, 'w')

file.write("Pre-fork\n")
file.flush

pid = fork

file.write(pid ? "In parent\n" : "In child\n")

file.close
然后
cat$(ruby./test.rb)
将包含

Pre-fork
In parent
In child

注意:我在fork之前刷新文件,以确保不会因为IO缓冲而看到两个
Pre-fork
s。根据您想要的“共享”类型,这可能就足够了。

您的意思是,它“正常工作”吗?不,我无法使它工作。我初始化了一个新文件,在新文件块中,我有一个fork块,当我尝试向文件添加新行时,它不会写入任何内容。