Ruby:用于信号处理的猴子补丁模块

Ruby: monkey patch module for signal handling

我使用的库在接收到 INT 或 TERM 等信号时无法正常退出。我想把他们困住然后优雅地退出。是否可以将猴子补丁信号捕获到外部模块中?我的代码的信号捕获工作正常,但在模块代码处于活动状态时调用 INT 时没有任何用处。

信号影响的不是对象或模块,而是进程,因此无需修补第三方模块来捕获信号。只需将它们困在您的代码中即可。

Monkeypatching 涉及通过换出方法或在其名称空间中插入比通常更多的方法来修改库的代码。

信号处理是在进程级别完成的,因此您无法对其进行猴子修补。您可以做的是添加必要的信号处理程序并让代码正确响应,或者执行您希望它执行的任何关闭行为。

例如:

Signal.trap("INT") do
  BustedLibrary.shutdown!
  exit(0)
end

您可能还会在顶层看到 Interrupt 异常,这是您可以捕获并处理的另一件事。