2010-03-21 97 views
3

我尝试杂种和使用下面的代码:“Hello World”的优雅地退出线程在Ruby中

require 'rubygems' 
require 'mongrel' 

class SimpleHandler < Mongrel::HttpHandler 
    def process(request, response) 
     response.start(200) do |head, out| 
      head["Content-Type"] = "text/plain" 
      out.write("Hello World!\n") 
     end 
    end 
end 

h = Mongrel::HttpServer.new("0.0.0.0", "3000") 
h.register("/test", SimpleHandler.new) 
puts "Press Control-C to exit" 
h.run.join 

trap("INT") do 
    puts "Exiting..." 
end 

基本上,这只是打印出当我去为localhost:3000 /测试。它工作正常,我可以关闭与控制-C程序。但是,当我按下Control-C,这得到输出:

my_web_server.rb:17:in `join': Interrupt 
from my_web_server.rb:17 

所以我试图把那个trap("INT")声明在最后,但它是没有得到调用。解?

谢谢。

回答

7

没有必要捕获INT如果你想要做的是没有堆栈跟踪退出。控制-c使一个“中断”异常。所以,为了让上控制-C程序退出而不丑陋的堆栈跟踪,捕获了异常:

begin 
    ... # do stuff 
rescue Interrupt 
    puts "Exiting..." 
end