2011-06-07 14 views
1

我正在使用IRB處理數據庫,並且我想對數據庫進行定期更改(例如每10秒),以顯示STDOUT中的日誌。Mac上的IRB中的並行進程出現的問題

此外,我希望手動控制能夠更改數據庫並停止第一個進程。

到目前爲止,我想出了以下

def start 
    stop 
    @running = Thread.new do 
    loop do 
     fork do 
     puts 'change the database' 
     end 
     sleep 10 
    end 
    end 
    nil 
end 

def stop 
    @running.kill if @running 
end 

然而,除非我進入主IRB線程東西,這不是每隔10秒。

如何讓它工作?

+0

爲什麼你使用'fork'和線程在同一時間目前尚不清楚禁用的ReadLine。 – tadman 2011-06-07 14:23:39

+1

這是從第一道工序獲得產量的唯一途徑。只是線程不會產生穩定的輸出,而只是fork很難控制(如果我是正確的)。有些東西在我的設置中可能是錯誤的,我不知道如何找到它。 – Andrei 2011-06-07 15:31:02

回答

1

OSX上的一些readline版本被阻塞。如果一個人體驗您所描述的行爲,他們可以通過將

IRB.conf[:USE_READLINE] = false 

在.irbrc

0

對我來說工作很好(用紅寶石1.9.2-p180和1.8.7-p334測試)。

+1

它是否每10秒顯示一次消息,而您沒有按Enter鍵? – Andrei 2011-06-07 11:46:18

+0

是的,每隔10秒,無需按下輸入。 – 2011-06-07 12:55:27

+1

我只收到第一條消息,必須按Enter才能獲得下一條消息並繼續循環。我在Mac上使用ruby'1.9.2-p180'和irb'0.9.6'。你在運行Linux嗎?你可以嘗試在沒有'.irbrc'的情況下運行IRB嗎? – Andrei 2011-06-07 13:32:19