在后台运行时,Ruby无法读取TCP套接字

时间:2016-03-30 17:29:22

标签: ruby linux debian

我在Windows下用Ruby写了一个Slack bot,一切正常,直到我决定在Linux服务器上运行它。当我访问我的shell并运行脚本时,它在前台正常工作,但一旦我将它移动到后台它就会停止工作。我在使用Net :: HTTP的HTTP请求上收到超时错误,或者在套接字读取时收到EOFError。

我在Debian 7上使用Ruby 2.3。

我认为Ruby进程自行停止,因为我只有在将进程返回到前台时才会收到错误,并且如果我在进程在后台时运行ps aux它就会“列出了T“(停止)标志。

由于我想更熟悉Linux,我想知道是什么导致了这个问题,而不是如何解决它。

编辑:我发现我的用户输入处理程序导致了问题。这是有问题的一点:

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

1 个答案:

答案 0 :(得分:0)

问题看起来像是gets

默认情况下,gets从STDIN读取。 The documentation说:

  

返回(并指定$ _)ARGV(或$ *)中文件列表中的下一行,如果命令行中没有文件,则返回标准输入。

代码/线程将停止并等待来自键盘的提示,或者如果重定向STDIN,则从管道输入读取,或者从作为参数提供的文件读取到命令行上的脚本。