我想确保在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
以外的信号杀死该过程时,这两种方法的效果非常好。
那么有没有办法确保代码运行,即使进程被这个信号杀死了?
答案 0 :(得分:4)
根据设计,信号9是不可捕捉的,不可忽视的杀戮。您的at_exit
将无法运行,因为操作系统只会终止接收此信号的任何进程,而不会给它任何额外工作的机会。