2016-03-30 74 views
0

我在Windows下用Ruby編寫Slack殭屍工具,一切正常,直到我決定在Linux服務器上運行它。當我訪問我的shell並運行腳本時,它在前臺運行正常,但是一旦我將它移動到後臺,它就會停止工作。我在使用Net :: HTTP的HTTP請求或套接字讀取的EOFError上收到了超時錯誤。Ruby在後臺運行時無法讀取TCP套接字

我使用Ruby 2.3 Debian的7

我認爲Ruby進程自行停止,因爲我只有一次我進程返回前臺得到錯誤,如果我跑ps aux當進程處於後臺時,它將列出「T」(停止)標誌。

由於我想更熟悉Linux,我想知道是什麼導致了這個問題,而不是如何解決它。

編輯:我發現我的用戶輸入處理程序導致該問題。這裏是有問題的位:

def input_handler 
    return Thread.new { 
    loop do 
     user_input = gets.chomp 
    end 
    } 
end 
+0

你能發表一些代碼嗎? – leobelizquierdo

+0

這不是Ruby問題,因爲有許多基於Ruby的HTTP客戶端和HTTPd在後臺運行良好。問題在於你的腳本或你的配置。但是,除非你告訴我們更多,否則我們無法幫助你。 –

+0

歡迎使用堆棧溢出。 「尋求調試幫助的問題(」爲什麼這個代碼不工作?「)必須包含所需的行爲,特定的問題或錯誤以及在問題本身中重現問題所需的最短代碼。給其他讀者。請參閱:[如何創建一個最小,完整和可驗證的示例](http://stackoverflow.com/help/mcve)。「 –

回答

0

這個問題看起來像是gets

默認gets從STDIN讀取。 The documentation說:

返回(並分配到$ _)下一行從文件中ARGV列表(或$ *),或從標準輸入,如果沒有文件存在於命令行上。

代碼/線程將停止和等待提示從鍵盤,或者如果STDIN被重定向或從作爲參數對命令行腳本文件從傳送輸入讀取。

+0

我不太瞭解這種行爲。不僅應該停止線程並等待鍵盤輸入,而不是整個腳本? – Armadillomon