Не удается прерывать/завершать Ruby script с помощью Ctrl + C на Windows

My script открывает TCP-соединение и считывает данные с сервера. Если сервер не отвечает, я пытаюсь прервать script с помощью Ctrl + C, но он не работает. Единственный способ прервать script - это убить процесс в диспетчере задач. Любые идеи о том, как прервать такие script?

require 'socket'
host = '...'
port = ...
s = TCPSocket.open(host, port)
while line = s.gets
 puts line.chop
end
s.close
3 ответа

Я заметил, что я нажимаю Ctrl + C, ожидая ответа от сервера, и некоторое время последнего ответа приходит, приложение завершается. Но пока я жду по сокету (s.gets), Ctrl + C не имеет эффекта.

Поэтому я решил проблему, выполнив сетевой код в другом потоке.

require 'socket'
host = '...'
port = ...
t = Thread.new do
 s = TCPSocket.open(host, port)
 while line = s.gets
 puts line.chop
 end
 s.close 
end
STDIN.getc

Теперь я могу завершить script, введя любой символ. Но все же было бы неплохо узнать об альтернативном решении.


ловушка ( "SIGINT" ) {очистка; Выход}


В Windows введите Ctrl + Pause

licensed under cc by-sa 3.0 with attribution.