Detecting control-c?

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.

Thanks.

William E. Rubin wrote:

How does one detect Control-C?

trap(“INT”){ … }

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.

On 12/8/05, William E. Rubin [email protected] 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.

hump:[]:/home/mz652c% cat signal.rb

trap(“INT”) do
puts “got signal INT”
end

puts “Sup”
gets

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, Joe Van D. [email protected] wrote:

got signal INT
Interesting. When I ran the program above I get:
^Cgot signal INT

Any ideas on how to not get the ‘^C’ text?

On 12/9/05, Jim F. [email protected] wrote:

got signal INT
got signal INT

Interesting. When I ran the program above I get:
^Cgot signal INT

Any ideas on how to not get the ‘^C’ text?

Dunno, I didn’t get the ‘^C’ text. (on linux)

On Dec 9, 2005, at 8:50 AM, Jim F. wrote:

got signal INT
got signal INT

Interesting. When I ran the program above I get:
^Cgot signal INT

Any ideas on how to not get the ‘^C’ text?

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.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs