2012-09-29 50 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