ruby 等待所有分叉的子进程完成

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ruby 等待所有分叉的子进程完成相关的知识,希望对你有一定的参考价值。

pids = []
(1..(ENV['CPUCORES'] || 3)).each do
  pids << fork do

    # do your stuff

  end
end

# hold your breath until all children finish
until pids.all? { |p|
  !system("ps --no-headers -p #{p} > /dev/null 2>&1") ||
      system("ps --no-headers -p #{p} | grep defunct> /dev/null 2>&1")
}
  sleep 1
end

以上是关于ruby 等待所有分叉的子进程完成的主要内容,如果未能解决你的问题,请参考以下文章

分叉的子进程是不是使用相同的信号量?

分叉一个不使用它自己的内存副本的子进程

ruby Ruby on Rails中的分叉进程

在 C 中等待子进程终止的最佳实践

Ruby - 分叉进程上的 set_trace_func

fork + exec + caller 不应该等待孩子