杀死回调耙
Kill callback rake
我有一个非常长的 rake 任务,最后将结果写入文件。我想杀死它,但将其当前结果写入文件。
我知道我可以让它在每次迭代时都写入文件,但这会使它变得更长。那么有没有办法在任务被杀死之前调用一个函数?
假设进程被正常终止(即不是通过 kill -9
或任何其他 SIGKILL
),您可以在终止前从信号和 "do something" 中解救出来。 (如果你愿意,甚至可以拒绝终止!)
最基本的方法是定义一个 at_exit
proc:
at_exit { write_something_to_file }
或者,您可以更细化并在代码中定义 rescue
个块:
rescue SystemExit, Interrupt
# ...
...或者,您可以通过自定义信号(例如 USR1
)通过 "killing" 流程建立更多控制,而不是发送 SIGINT
:https://ruby-doc.org/core/Signal.html .
您可以采用多种变体方法,只要发送的不是 SIGKILL
即可,因为这在设计上是无法捕获的。
我有一个非常长的 rake 任务,最后将结果写入文件。我想杀死它,但将其当前结果写入文件。
我知道我可以让它在每次迭代时都写入文件,但这会使它变得更长。那么有没有办法在任务被杀死之前调用一个函数?
假设进程被正常终止(即不是通过 kill -9
或任何其他 SIGKILL
),您可以在终止前从信号和 "do something" 中解救出来。 (如果你愿意,甚至可以拒绝终止!)
最基本的方法是定义一个 at_exit
proc:
at_exit { write_something_to_file }
或者,您可以更细化并在代码中定义 rescue
个块:
rescue SystemExit, Interrupt
# ...
...或者,您可以通过自定义信号(例如 USR1
)通过 "killing" 流程建立更多控制,而不是发送 SIGINT
:https://ruby-doc.org/core/Signal.html .
您可以采用多种变体方法,只要发送的不是 SIGKILL
即可,因为这在设计上是无法捕获的。