Убить обратный звонок рейка - PullRequest
0 голосов
/ 10 декабря 2018

У меня очень длинная задача с граблями, которая заканчивается записью результата в файл.Я хотел бы убить его, но получить его текущий результат, записанный в файл.

Я знаю, что мог бы сделать это записать в файл на каждой итерации, но это сделало бы его еще длиннее.Так есть ли способ вызвать функцию до того, как задача будет убита?

1 Ответ

0 голосов
/ 10 декабря 2018

Предполагая, что процесс завершен изящно (т. Е. Не через 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 отправляется, так как это не удалось поймать

...