如何检测Ruby线程何时从线程中被杀死

时间:2013-03-15 17:25:26

标签: ruby multithreading

如果我使用以下代码启动了一个线程,如何从线程本身中捕获/检测退出调用,以便在终止之前进行一些清理?

thr = Thread.new { sleep }
thr.status # => "sleep"
thr.exit
thr.status # => false

我在想,也许它会像下面这样,但我不确定。

thr = Thread.new {
    begin
        sleep
    rescue StandardError => ex
        puts ex.message
    rescue SystemExit, Interrupt
        puts 'quit'
    ensure
        puts 'quit'
    end
}
thr.status # => "sleep"
thr.exit #=> "quit"
thr.status # => false

1 个答案:

答案 0 :(得分:1)

这是未经测试的,但是线程就像一切都可以专门通过在GC激活之前跳入。所以我认为你可以添加一个ObjectSpace终结器方法,该方法在Thread被垃圾收集之前执行,以便做你想要的。

Ruby: Destructors?