Hi!

I'm having trouble trapping Ctrl-C. I have a CLI that spawns processes I wo=
uld like to survive the CLI, but if I press Ctrl-C the spawns dies along wi=
th the CLI. I have experimented with trap(INT), and have boiled down the pr=
oblem into a small example program. I run this on Linux.

First, the program:
-------- 8< --------
#!/usr/bin/jruby

require 'readline'

keep_at_it =3D true

trap("INT") { puts "\nCtrl-C!" ; keep_at_it =3D false }

while (keep_at_it) do
  line =3D Readline.readline("Enter for new xeyes, anything else to quit: "=
, true)
  if (line.length =3D=3D 0 && keep_at_it =3D=3D true)
    Thread.new { system("xeyes") }
  else
    keep_at_it =3D false
  end
end
-------- 8< --------

Now, the behaviour:

When using jruby (1.6.0):
* Quitting leaves spawned processes running
* Ctrl-C kills all spawned processes, writes "Ctrl-C!" and quits after next=
 return. I have used strace to verify that the xeyes actually gets a SIGINT=
, not a SIGHUP.

When using ruby (1.8.7):
* Quitting leaves spawned processes running
* First time Ctrl-C is pressed, the first started xeyes dies.
* Second time Ctrl-C is pressed "Ctrl-C!" is written and the program exists=
 after next return, leaving remaining spawned processes alive.


I don't understand the behaviour. The jruby version feels more consistent, =
but is far away from what I need. The ruby version feels strange, but I cou=
ld handle my needs by spawning a dummy process if I didn't need jmx4r (whic=
h as far as I understand requires jruby).

1. How is trapping of SIGINT supposed to work? How is the passing of SIGINT=
 supposed to work?
2. Why does it differs between ruby and jruby?
3. Anyone with a suggestion how to spawn processes not affected by a SIGINT=
?


///BR, Jens Carlberg