Vincent Foley <gnuvince / yahoo.ca> writes:


> how can I trap signals in Ruby like Ctrl-C, Ctrl-Z and do something else
> with them?

Would you believe 'trap'?

     trap("INT") do 
       puts "ouch"
     end

     while line = gets
       puts line
     end

Or...

----------------------------------------------------------- Kernel::trap
     trap( signal, cmd ) -> anObject
     trap( signal ) {| | block } -> anObject
------------------------------------------------------------------------
     Specifies the handling of signals. The first parameter is a signal
     name (a string such as ``SIGALRM'', ``SIGUSR1'', and so on) or a
     signal number. The characters ``SIG'' may be omitted from the
     signal name. The command or block specifies code to be run when the
     signal is raised. If the command is the string ``IGNORE'' or
     ``SIG_IGN'', the signal will be ignored. If the command is
     ``DEFAULT'' or ``SIG_DFL'', the operating system's default handler
     will be invoked. If the command is ``EXIT'', the script will be
     terminated by the signal. Otherwise, the given command or block
     will be run.
     The special signal name ``EXIT'' or signal number zero will be
     invoked just prior to program termination.
     trap returns the previous handler for the given signal.
        trap 0, proc { puts "Terminating: #{$$}" }
        trap("CLD") { puts "Child died" }
        fork && Process.wait
     produces:
        Terminating: 16422
        Child died
        Terminating: 16421