以下に、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
すべての反復を通じて、ユーザー入力を求められることはありません。
以下に、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
すべての反復を通じて、ユーザー入力を求められることはありません。
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"
別のスレッドで終了条件を確認する必要があると思います:
# 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>
標準入力の仕組みであるため、終了するには入力する必要があります。