【问题标题】:Fork process in ruby and write to the same fileruby中的fork进程并写入同一个文件
【发布时间】:2017-10-28 21:51:03
【问题描述】:

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

谢谢

【问题讨论】:

  • 你是什么意思,它不是“正常工作”吗?
  • 不,我无法让它工作。我初始化了一个新文件,在新文件块中,我有 fork 块,当我尝试将新行附加到文件时它不会写入任何内容。

标签: ruby file process subprocess fork


【解决方案1】:

forked 进程将获得原始文件描述符的副本,因此假设父进程在forked 之前持有一个文件句柄,它会“正常工作”(就像多个进程共享一个文件,尽管在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-forks。根据您想要的“共享”类型,这可能就足够了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2013-02-28
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 2019-07-27
    • 2011-03-13
    相关资源
    最近更新 更多