2015-06-25 5 views
2

Я ловить сигнал сРубиновые предотвратить по умолчанию выход CTRL + C^C

rescue Interrupt => e 

Но он всегда печатает:

^CShutting down! 

Есть ли способ, чтобы предотвратить дефолт CTRL + C

^C 

Любые идеи ?

+0

Что вы пытаясь добиться, поймав сигнал? Возможно (и относительно легко) игнорировать сигнал, но может быть немного сложнее, если вам нужно контролируемое выключение, просто без сообщения. Похоже, какая-то другая библиотека отображает сообщение и может ожидать завершения выключения. –

+0

Не могли бы вы прояснить, написано ли это написание кода «Выключение!». - т. е. вы хотите, чтобы это сообщение, а не '^ C', эхом отдавалось терминалу? –

+0

Да, мой код делает «Shutting down». Когда получен сигнал, мой код отменяет текущие процессы, сохраняет прогресс, ставит «Выключение» и завершает 0. –

ответ

1

Некоторые терминалы поддерживают stty -echoctl отключить эхо символов управления:

`stty -echoctl` 

begin 
    loop do 
    # ... 
    end 
rescue Interrupt => e 
    puts 'shutting down' 
end 

Если выше не работает, вы можете отключить все вторя, установив IO#echo= в false:

require 'io/console' 

STDIN.echo = false 

begin 
    loop do 
    # ... 
    end 
rescue Interrupt => e 
    puts 'shutting down' 
end 
+0

Идеальное второе предложение работает как шарм. Привет, оцените! –

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

  • Нет связанных вопросов^_^