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

时间:2017-05-28 13:54:13

标签: ruby file process subprocess fork

有没有办法在运行时通过fork写入同一文件来生成不同的进程?

由于

1 个答案:

答案 0 :(得分:2)

fork ed进程将获得原始文件描述符的副本,因此假设父进程在其fork之前保持文件句柄,它将“只是工作”而非常小心(很像共享文件的多个进程,虽然在fork情况下注意,底层内核描述符是相同的,因此您的进程将共享诸如当前偏移量之类的内容。如果test.rb包含

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。根据您想要的“共享”类型,这可能就足够了。