4

私のスクリプトはTCP接続を開き、サーバーからデータを読み取ります。サーバーが応答しない場合は、Ctrl+C でスクリプトを中断しようとしますが、うまくいきません。スクリプトを終了する唯一の方法は、タスク マネージャーでプロセスを強制終了することです。そのようなスクリプトを中断する方法はありますか?

require 'socket'

host = '...'
port = ...

s = TCPSocket.open(host, port)

while line = s.gets
  puts line.chop
end

s.close 
4

3 に答える 3

1

trap( "SIGINT"){クリーンアップ; 出口}

于 2010-12-03T21:22:33.910 に答える
1

サーバーからの応答を待っている間に 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

これで、任意の文字を入力してスクリプトを終了できます。ただし、代替ソリューションについて知っておくとよいでしょう。

于 2010-12-03T21:33:14.867 に答える
0

Windows では、Ctrl+Pause と入力します。

于 2010-12-04T09:52:39.583 に答える