ruby – Thin不响应SIGINT或SIGTERM
bundle exec thin start -p 3111给出以下输出:
解决方法
我的猜测是,要么绑定EventMachine反应器循环阻止它退出,要么捕获SIGINT.
作为前者的简单示例,将其放入config.ru并使用瘦-p 4567启动: require 'thin' require 'sinatra' require 'eventmachine' get '/' do "hello world" end run Sinatra::Application EventMachine.schedule do trap("INT") do puts "Caught SIGINT" EventMachine.stop # this is useless # exit # this stops the EventMachine end i = 0 while i < 10 puts "EM Running" i += 1 sleep 1 end end 在不捕获SIGINT的情况下,您将获得与捕获它并调用EM.stop时相同的行为. EM.stop(至少在纯ruby版本中,您可以使用EVENTMACHINE_LIBRARY =“pure_ruby”瘦启动运行)设置一个标志,表示已请求停止,该标记在reactor循环内被拾取.如果反应器回路卡在一个台阶上(如上例所示),那么它就不会退出. 所以有几个选择: >使用上面的解决方法来捕获SIGINT并强制退出.这可能会使连接处于不干净的状态,但他们并没有快速称之为&什么都不肮脏;) 在您的实际代码中,这可能更难以跟踪,但查找生成线程并加入它们的任何位置,或大循环.当您尝试退出时,分析工具可以帮助显示正在运行的代码,最后您可以尝试禁用系统的各个部分和库来确定罪魁祸首的位置. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |