有没有办法在运行时通过fork写入同一文件来生成不同的进程?
由于
答案 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
。根据您想要的“共享”类型,这可能就足够了。