杀死回调耙

Kill callback rake

我有一个非常长的 rake 任务,最后将结果写入文件。我想杀死它,但将其当前结果写入文件。

我知道我可以让它在每次迭代时都写入文件,但这会使它变得更长。那么有没有办法在任务被杀死之前调用一个函数?

假设进程被正常终止(即不是通过 kill -9 或任何其他 SIGKILL),您可以在终止前从信号和 "do something" 中解救出来。 (如果你愿意,甚至可以拒绝终止!)

最基本的方法是定义一个 at_exit proc:

at_exit { write_something_to_file }

或者,您可以更细化并在代码中定义 rescue 个块:

rescue SystemExit, Interrupt
  # ...

...或者,您可以通过自定义信号(例如 USR1)通过 "killing" 流程建立更多控制,而不是发送 SIGINThttps://ruby-doc.org/core/Signal.html .

您可以采用多种变体方法,只要发送的不是 SIGKILL 即可,因为这在设计上是无法捕获的。