从子shell推送到数组

时间:2012-10-20 15:53:18

标签: ruby

我试图从子shell填充数组。这可能吗?

array = []
processes = []
limit = 10

File.foreach("/path/to/file") do |line|
  if processes.size == limit
    processes.delete Process.wait
  end

  processes << fork do
    begin
      something = so_something
      if something == something
        array.push(line)
      end
    end
  end
end
Process.waitall

如果我这样做,则在Process.waitall之后数组显示为空。我想稍后引用该数组。

1 个答案:

答案 0 :(得分:1)

当你分叉一个进程时,它的内存被复制,现在完全独立于父进程。如果要将一些数据传递回父级,则使用一些IPC(进程间通信)机制(管道,套接字等)

也许,而不是分叉,你想要创建一个线程而不是?线程可以更新共享状态(这正是使编写多线程程序变得困难的原因)。