2016-03-30 36 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