我有一个非常漫长的耙子任务,最后将结果写到文件中。我想杀死它,但将其当前结果写入文件中。
我知道我可以使它在每次迭代时写入文件,但这会使它更长。那么有没有办法在任务被杀死之前调用函数?
答案 0 :(得分:2)
假设该进程已被正常终止(即不通过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
即可发送,因为它在设计上是无法捕获的。