I know that it raises an Interrupt, but there are other things that are
also Interrupts (such as Timeout::Error). The documentation at ruby-doc.org doesn't list any details of class Interrupt, and the
"Programming Ruby" book at ruby-lang.org doesn't even seem to mention
that class Interrupt exists.
I know that it raises an Interrupt, but there are other things that are
also Interrupts (such as Timeout::Error). The documentation at
ruby-doc.org doesn't list any details of class Interrupt, and the
"Programming Ruby" book at ruby-lang.org doesn't even seem to mention
that class Interrupt exists.
Thanks.
Interrupt is a subclass of SignalException (which is a subclass of Exception). As far as I can tell (based on what I see in eval.c) it's only used for trapping Unix signals*, i.e. whatever's in your signal.h file.
Also, take a look at the Signal module.
Regards,
Dan
* Works on Windows too, though the implementation is different, and likely requires a separate sleeper thread.
hump::/home/mz652c% ruby signal.rb
Sup
got signal INT
got signal INT
got signal INT
got signal INT
got signal INT
pressing ctrl-c generates 'got signal INT'. Had to press ctrl-d to
exit the program.
···
On 12/8/05, William E. Rubin <williamerubin@dodgeit.com> wrote:
How does one detect Control-C?
I know that it raises an Interrupt, but there are other things that are
also Interrupts (such as Timeout::Error). The documentation at
ruby-doc.org doesn't list any details of class Interrupt, and the
"Programming Ruby" book at ruby-lang.org doesn't even seem to mention
that class Interrupt exists.
On 12/8/05, Joe Van Dyk <joevandyk@gmail.com> wrote:
> trap("INT") do
> puts "got signal INT"
> end
>
> puts "Sup"
> gets
>
> hump::/home/mz652c% ruby signal.rb
> Sup
> got signal INT
> got signal INT
Interesting. When I ran the program above I get:
^Cgot signal INT
....
The ^C is your ctrl-c being echoed by the
terminal device driver. You can use the stty
program to alter the behavior of the tty driver.
In particular, take a look at the -echoctl
option. In any case, the foreground process (ruby) doesn't
see the ctrl-c because the tty driver discards
it and sends the Interrupt signal instead and then takes
car of echoing '^C' back to the terminal itself.
The specific behavior may also depend on the particular
shell you are using.
Hope this helps.
···
On Dec 9, 2005, at 8:50 AM, Jim Freeze wrote:
On 12/8/05, Joe Van Dyk <joevandyk@gmail.com> wrote:
trap("INT") do
puts "got signal INT"
end
puts "Sup"
gets
hump::/home/mz652c% ruby signal.rb
Sup
got signal INT
Interesting. When I ran the program above I get:
^Cgot signal INT
....