2012-09-29 17 views
1

我使用红宝石“分支”选项的输出如下:如何查看多个分叉进程同时

pid1 = fork do 
    pid1_output = `ruby scrape1.rb` 
    puts "#{pid1_output}" 
    puts "" 
    exit 
end 

pid2 = fork do 
    pid2_output = `ruby scrape2.rb` 
    puts "#{pid2_output}" 
    puts "" 
    exit 
end 

pid3 = fork do 
    pid3_output = `ruby scrape3.rb` 
    puts "#{pid3_output}" 
    puts "" 
    exit 
end 

pid4 = fork do 
    pid4_output = `ruby scrape4.rb` 
    puts "#{pid4_output}" 
    puts "" 
    exit 
end 

Process.waitall 

这里的问题是,有时流程之一(例如:ruby scrape1.rb)可能失败或最终返回无法在变量中捕获的数量巨大的文本......我如何仍然同时运行4个进程并实时在一个终端窗口中查看其所有输出?我明白输出的顺序可能会变得很强烈,但这是好的..我基本上想要将每个分支进程的STDOUT和STDERR重新路由到主程序。这样我就可以看到我的每一个刮板,并随着他们的进展和错误发生。

+0

我该怎么做呢?网上有关于Kernel#select的示例代码吗? - 除了红宝石文档是...感谢您的输入。 – sambehera

+0

此外,rubydoc上的乒乓示例对我的上下文没有多大意义..也许我误解了你想指出的内容? – sambehera

回答

2
fork do 
    exec("ruby scrape1.rb") 
end 

fork do 
    exec("ruby scrape2.rb") 
end 

fork do 
    exec("ruby scrape3.rb") 
end 

fork do 
    exec("ruby scrape4.rb") 
end 

Process.waitall 
+0

我是否需要在每个叉子内“退出”?我将尝试这个,看看它是否工作..感谢您提供exec。 – sambehera

+0

无论如何,我在每个分支中添加了“exit”。我不知道它是否有助于关闭进程,但它似乎并没有显着改变输出。非常感谢,这真的解决了我的问题! – sambehera