2010-03-21 102 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