Tag: 信号

如何在RSpec中测试信号处理,特别是处理SIGTERM?

Heroku可能出于各种原因向您的应用程序发送SIGTERM,因此我创建了一个处理程序来处理一些清理,以防万一。 一些谷歌搜索没有得到任何关于如何在RSpec中测试这个问题的答案或例子。 这是基本代码: Signal.trap(‘TERM’) do cleanup end def cleanup puts “doing some cleanup stuff” … exit end 测试程序收到SIGTERM时调用此清理方法的最佳方法是什么?

某种Ruby“中断”

所以这就是我正在做的事情 – 我有一个ruby脚本,每分钟打印出信息。 我还为陷阱设置了一个proc,这样当用户点击ctrl-c时,进程就会中止。 代码看起来像这样: switch = true Signal.trap(“SIGINT”) do switch = false end lastTime = Time.now while switch do if Time.now.min > lastTime.min then puts “A minute has gone by!” end end 现在代码本身是有效的并且运行良好,但它做了很多无用的工作,尽可能多地检查switch的值。 它占用了尽可能多的处理器(至少是一个核心的100%),所以它非常浪费。 我怎样才能做类似的事情,每隔一段时间更新一次事件,而不浪费大量的周期? 所有帮助表示赞赏,并提前致谢!

我如何告诉独角兽了解Heroku的信号?

也许你已经看到了…… 2012-03-07T15:36:25 + 00:00 heroku [web.1]:使用SIGTERM停止进程 2012-03-07T15:36:36 + 00:00 heroku [web.1]:使用SIGKILL停止进程 2012-03-07T15:36:36 + 00:00 heroku [web.1]:错误R12(退出超时) – >进程无法在SIGTERM的10秒内退出 2012-03-07T15:36:38 + 00:00 heroku [web.1]:进程退出状态为137 在heroku上运行独角兽时,这是一个众所周知的问题… heroku使用SIGTERM进行正常关闭 unicorn使用SIGTERM进行快速关机 我可以告诉heroku发送SIGQUIT吗? 或者我可以告诉独角兽将SIGTERM视为优雅关闭吗?

如何配置ruby以在Ctrl-C(SIGINT)上进入调试器?

我想在输入ctrl-C(或发送SIGINT)时进入调试器。 我已经安装了调试器 (我正在运行Ruby 1.9.3)并validation它是否有效。 我已将此添加到我的安装文件中(这适用于Padrino,但我认为它与Rails类似): # file: config/boot.rb Padrino.before_load do trap(“SIGINT”) { debugger } if Padrino.env == :development end …但是键入Ctrl-C不会调用调试器。 事实上,如果我用puts “saw an interrupt!”替换debugger puts “saw an interrupt!” ,键入Ctrl-C也不会导致打印。 更新 根据Mike Dunlavey的 这个建议 ,我尝试在调试器中显式调用catch Interrupt : $ rdebug `which padrino` console ^Z^Z$HOME/usr/bin/padrino:9 require ‘rubygems’ (rdb:1) catch Interrupt Catch exception Interrupt. (rdb:1) c => Loading development […]