有些命令会挂起我的Ruby web应用程序

有些命令会挂起我的Ruby web应用程序,ruby,multithreading,sinatra,command-execution,Ruby,Multithreading,Sinatra,Command Execution,我正在使用Rails和Sinatra,我想在服务器上执行命令。这些命令是从表单中输入的。问题是,如果我输入一个需要输入的命令,我的整个应用程序就会挂起。下面是我用来执行它们的代码: @threads << Thread.new do Thread.current["buffer"] = "" puts "starting #{params[:command]}" IO.popen(params[:command]) do |io| io.eac

我正在使用Rails和Sinatra,我想在服务器上执行命令。这些命令是从表单中输入的。问题是,如果我输入一个需要输入的命令,我的整个应用程序就会挂起。下面是我用来执行它们的代码:

@threads << Thread.new do
    Thread.current["buffer"] = ""
    puts "starting #{params[:command]}"
    IO.popen(params[:command]) do |io|
        io.each_line {|l| Thread.current["buffer"] += l}
    end
end

@threads尝试将/dev/null管道化到子进程中:

IO.popen("#{params[:command]} </dev/null") do ...

IO.popen(“#{params[:command]}解决方案:我刚刚记得去年我在这里询问了Ruby线程的行为:。我尝试使用1.9.1解释器运行Sinatra,但效果很好。但是在1.8.6下它没有效果。

我想你的意思是“如果我输入一个需要输入的命令。。。“不是吗?您是否等待线程稍后完成
join
?这段代码对我来说似乎没问题。@vava我用答案编辑了问题。”。