我試圖創建一個可以從命令行啓動的ruby應用程序,它有兩件事:運行一個連續的作業(loop
與sleep
,它運行一些操作[遠程提要解析])與一個線程和sinatra在第二個線程中。我的代碼(簡體)看起來像這樣:終止終止所有線程
require 'sinatra'
class MyApp < Sinatra::Base
get '/' do
"Hello!"
end
end
threads = []
threads << Thread.new do
loop do
# do something heavy
sleep 10
end
end
threads << Thread.new do
MyApp.run!
end
threads.each { |t| t.join }
上面的代碼實際上做了它的工作非常好 - 西納特拉的應用程序是在4567端口開始可用和do something heavy
任務beeing解僱每次10秒。但是,我無法殺死那個腳本。
我正在運行它與ruby app.rb
但用ctrl + c殺死它不起作用。它殺死了sinatra線程,但第二個仍在運行,爲了停止腳本,我需要關閉終端窗口。
我試圖殺死SIGNINT所有的線程,但它如預期
trap "SIGINT" do
puts "Exiting"
threads.each { |t| Thread.kill t }
exit 130
end
你能不能幫我這也沒有工作?提前致謝。
您是否看到「puts」的輸出Exiting「'? – Humza
不幸的是,我不 – mbajur
這顯然意味着你的'陷阱'不工作。作爲一個附註,我建議通過'thread.exit'而不是'Thread.kill(thread)'來退出線程 - 它更簡潔。 – Humza