ruby - Ruby - Fork 抛出 Errno::EPIPE
问题描述
在什么情况下fork do
会抛出调用Errno::EPIPE: Broken pipe
?我在 AWS 实例上使用 Resque,奇怪的是,虽然 Resque 在登台服务器上运行良好,但当它试图让工作人员在生产服务器上分叉子进程时,它会不断抛出这些损坏的管道错误,即使他们正在使用相同的 AMI。我已经输入了足够多的日志语句来识别当 Resque 尝试分叉时引发的错误:
@child = fork do
unregister_signal_handlers if term_child
perform(job, &block)
exit! unless run_at_exit_hooks
end
所以错误来自最上面一行(https://github.com/resque/resque/blob/master/lib/resque/worker.rb#L909)。我不清楚为什么fork
调用会抛出Errno:EPIPE
. 服务器有足够的内存、CPU 和硬盘驱动器可供备用。