在ruby中Fork进程并写入同一文件
有没有办法让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
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块,当我尝试向文件添加新行时,它不会写入任何内容。