杀死回调耙

时间:2018-12-10 14:19:02

标签: ruby rake kill

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

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

1 个答案:

答案 0 :(得分:2)

假设该进程已被正常终止(即不通过kill -9或任何其他SIGKILL终止),则可以从信号中解救出来并在终止之前“执行某些操作”。 (如果愿意,甚至拒绝终止!)

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

at_exit { write_something_to_file }

或者,您可以更精细一些,并在代码中定义rescue块:

rescue SystemExit, Interrupt
  # ...

...或者,您可以通过自定义信号(例如USR1“杀死”进程来建立更多控制,而不用发送SIGINThttps://ruby-doc.org/core/Signal.html

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