确保程序退出时运行代码块

时间:2016-01-07 14:11:56

标签: ruby

我想确保在ruby程序结束时运行一些代码。我使用了以下方法,但在某些情况下它们不起作用。

def a_method
   # do some work
ensure
   # code that must be run when method ends and if program exits when it still in this method.
end

def a_method
   at_exit{ 
      # run code that needs to be run when process exists
   }
   # do some work
ensure
   # do code that needs to be run when method ends
end

虽然我没有尝试过所有的信号,但是当使用kill -9以外的信号杀死该过程时,这两种方法的效果非常好。 那么有没有办法确保代码运行,即使进程被这个信号杀死了?

1 个答案:

答案 0 :(得分:4)

根据设计,信号9是不可捕捉的,不可忽视的杀戮。您的at_exit将无法运行,因为操作系统只会终止接收此信号的任何进程,而不会给它任何额外工作的机会。