这是我编写的一些代码的简化版本:

class InfiniteLoop
  def run
    trap('SIGTERM') do
      puts 'exiting'
      exit
    end
    loop {}
  end
end

如果我运行:
InfiniteLoop.new.run

我可以ctrl+c并获得:
exiting

但是,当我这样做时:
t = Thread.new { InfiniteLoop.new.run }
sleep 1
t.terminate

我没看到:
exiting

有人可以在这里指出正确的方向吗?我想在终止线程时具有相同的行为。

最佳答案

如果没有发送SIGTERM信号(通过ctrl + c),则不执行trap块。
另请参阅内核方法:

at_exit { puts 'exiting' }

关于ruby - 线程#终止并处理SIGTERM,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13850554/

10-12 00:12