【发布时间】:2018-12-10 14:19:02
【问题描述】:
我有一个非常长的 rake 任务,完成将结果写入文件。我想杀死它,但将它的当前结果写入文件中。
我知道我可以让它在每次迭代时写入文件,但这会使它更长。那么有没有办法在任务被杀死之前调用函数呢?
【问题讨论】:
我有一个非常长的 rake 任务,完成将结果写入文件。我想杀死它,但将它的当前结果写入文件中。
我知道我可以让它在每次迭代时写入文件,但这会使它更长。那么有没有办法在任务被杀死之前调用函数呢?
【问题讨论】:
假设进程被优雅地终止(即不是通过kill -9 或任何其他SIGKILL),您可以从信号中解救并在终止前“做点什么”。 (如果您愿意,甚至可以拒绝终止!)
最基本的方法是定义一个at_exit proc:
at_exit { write_something_to_file }
或者,您可以更细化并在代码中定义 rescue 块:
rescue SystemExit, Interrupt
# ...
...或者,您可以通过自定义信号(例如USR1)“终止”进程来建立更多控制权,而不是发送SIGINT:https://ruby-doc.org/core/Signal.html。
您可以采用多种不同的方法,只要不是发送 SIGKILL,因为这是设计无法捕获的。
【讨论】: