2013-03-11 2 views
0

Я знаю, что мы можем справиться с Ctrl-C с использованиемручка завершения процесса рубина после нажатия кнопки «X»

rescue Exception, or 

rescue SystemExit, or 

trap(0) or 

trap("SIGTERM") or 

trap("INT"), 

, но я хочу, чтобы обработать перерыв, нажав кнопку «X», чтобы закрыть окно командной строки, требование заключается в том, чтобы зафиксировать некоторый прогресс, когда программа завершена ненормально, например перезагрузка системы или нажатие кнопки «X», после чего я могу продолжить работу с точки прерывания в следующий раз,

Я пробовал все из них, никто не работал.

У вас есть предложения? Является ли это возможным?

ответ

0

Попробуйте это,

begin 
    10.times do |second| 
    @second = second 
    sleep 1 
    end 
ensure 
    File.open("/tmp/terminated.txt", 'w') do |f| 
    f.write("Process terminated after #{@second} second(s)") 
    end 
end 

Код в блоке ensure всегда будет работать, даже если процесс завершается с помощью Ctrl-C или закрытия окна терминала.

Он также будет работать, если процесс не будет завершен. Это может быть предотвращено путем проверки завершения цикла. File.open(...) unless @second == 10

+0

Благодарим за помощь, но моя ОС - это окна 7, это не работает. – aaron

+0

Возможно, у окон нет каталога/tmp. Вы можете попробовать изменить путь к файлу или заменить блок File на другое действие, например 'puts ... ... {@ seconds}". – Sam

+0

Да, я увидел эту проблему и изменил путь к файлу, но результат тот же: Ctrl-C работал, нажав «X». – aaron

Смежные вопросы