7

以下に、1以降の数値を無限に出力するルビースクリプトがあります。'Ctrl + C'やキー'q'のようなターミナルの割り込みを介して、スクリプトに無限の実行を停止させるにはどうすればよいですか?

a = 0
while( a )
  puts a
  a += 1
  # the code should quit if an interrupt of a character is given
end

すべての反復を通じて、ユーザー入力を求められることはありません。

4

2 に答える 2

14

Kernel.trap を使用して、Ctrl-C のシグナル ハンドラーをインストールします。

#!/usr/bin/ruby

exit_requested = false
Kernel.trap( "INT" ) { exit_requested = true }

while !exit_requested
  print "Still running...\n"
  sleep 1
end
print "Exit was requested by user\n"
于 2010-12-22T11:56:33.420 に答える
4

別のスレッドで終了条件を確認する必要があると思います:

# check for exit condition
Thread.new do
  loop do
    exit if gets.chomp == 'q'
  end
end

a = 0
loop do
  a += 1
  puts a
  sleep 1
end

ところで、それがq<Enter>標準入力の仕組みであるため、終了するには入力する必要があります。

于 2010-12-22T11:48:50.867 に答える