I also tried to debug the problem by using dtruss (i'm on a mac) while the ruby program is running and tried to see what the differences are between the two. Problem is, I don't fully understand the output. Comparing them though, it seems like what enabled the 1st program to exit immediately on "ctrl + c" during gets is that the __pthread_canceled system call was executed. If you guys have more insights into this, let me know: case 1 (SIGINT with no system before gets) dtruss output: http://pastie.org/3305367 case 2 (SIGINT with system before gets) dtruss output: http://pastie.org/3305276 -- Posted via http://www.ruby-forum.com/.