# trap(:INT); system(); STDIN.gets(); ^C

**URL:** <https://www.ruby-forum.com/t/trap-int-system-stdin-gets-c/186122>\
**Category:** Ruby\
**Created:** [March 31, 2010, 8:47pm UTC](https://www.ruby-forum.com/t/trap-int-system-stdin-gets-c/186122 "2010-03-31T20:47:39Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![clashcityrocker](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/bbe5ce/32.png) [@clashcityrocker](https://www.ruby-forum.com/u/clashcityrocker)\
**Post date:** [March 31, 2010, 8:47pm UTC](https://www.ruby-forum.com/t/trap-int-system-stdin-gets-c/186122/1 "2010-03-31T20:47:39Z")

</div>

Considering a trivial example:

trap :INT do  
puts  
puts ‘Bye’  
exit  
end

# system ‘date’

print 'Say something: ’  
STDOUT.flush  
puts “You said: #{STDIN.gets}”

When prompted to say something, hitting Ctrl+C will call trap(:INT)  
block.  
However, after uncommenting line 7, Ctrl+C won’t cause a call to  
trap(:INT) block unless I send a newline or EOF.  
Can anyone shed some light on this one?

Platform: linux; ruby 1.8.7

Thanks

---

<div class="post-metadata">

**Author:** ![clashcityrocker](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/bbe5ce/32.png) [@clashcityrocker](https://www.ruby-forum.com/u/clashcityrocker)\
**Post date:** [March 31, 2010, 10:13pm UTC](https://www.ruby-forum.com/t/trap-int-system-stdin-gets-c/186122/2 "2010-03-31T22:13:30Z")

</div>

unknown wrote:

> With or without line 7, here both programs behave the same (Ctrl-C +  
> EOF -\> Bye):

So you need to hit ^C^D every time?

Here’s the behavior I’m getting:

# without system(‘date’)

$ ruby test.rb  
Say something: ^C  
Bye

# with system(‘date’)

$ ruby test.rb  
Wed Mar 31 20:04:28 EEST 2010  
Say something: ^C

---

<div class="post-metadata">

**Author:** ![clashcityrocker](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/bbe5ce/32.png) [@clashcityrocker](https://www.ruby-forum.com/u/clashcityrocker)\
**Post date:** [March 31, 2010, 10:21pm UTC](https://www.ruby-forum.com/t/trap-int-system-stdin-gets-c/186122/3 "2010-03-31T22:21:51Z")

</div>

Might be worth to mention that both of the alternatives below will  
immediately exit after ^C

### ALT 1

trap :INT do  
puts  
puts ‘Bye’  
exit  
end

puts IO.popen(‘date’).gets  
print 'Say something: ’  
STDOUT.flush  
puts “You said: #{STDIN.gets}”

### ALT 2

begin  
system ‘date’  
print 'Say something: ’  
STDOUT.flush  
puts “You said: #{STDIN.gets}”  
rescue Interrupt  
puts  
puts ‘Bye’  
exit  
end

---

<div class="post-metadata">

**Author:** ![clashcityrocker](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/bbe5ce/32.png) [@clashcityrocker](https://www.ruby-forum.com/u/clashcityrocker)\
**Post date:** [March 31, 2010, 9:49pm UTC](https://www.ruby-forum.com/t/trap-int-system-stdin-gets-c/186122/4 "2010-03-31T21:49:59Z")

</div>

On Wed, Mar 31, 2010 at 2:47 PM, Tudor L. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> When prompted to say something, hitting Ctrl+C will call trap(:INT)  
> block.  
> However, after uncommenting line 7, Ctrl+C won’t cause a call to  
> trap(:INT) block unless I send a newline or EOF.

With or without line 7, here both programs behave the same (Ctrl-C +  
EOF → Bye):

$ ruby a.rb  
Say something:  
Bye  
$ ruby b.rb  
Wed Mar 31 15:43:32 EDT 2010  
Say something:  
Bye

> Platform: linux; ruby 1.8.7

$ uname -a  
Linux [mcu.claw.ctc.com](http://mcu.claw.ctc.com) 2.6.18-164.11.1.el5 #1 SMP Wed Jan 20 07:39:04  
EST 2010 i686 i686 i386 GNU/Linux  
$ ruby -v  
ruby 1.8.5 (2006-08-25) [i386-linux]

---

<div class="post-metadata">

**Author:** ![clashcityrocker](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/bbe5ce/32.png) [@clashcityrocker](https://www.ruby-forum.com/u/clashcityrocker)\
**Post date:** [April 1, 2010, 7:30pm UTC](https://www.ruby-forum.com/t/trap-int-system-stdin-gets-c/186122/5 "2010-04-01T19:30:33Z")

</div>

On Wed, Mar 31, 2010 at 3:43 PM, Tudor L. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> unknown wrote:
> 
> > With or without line 7, here both programs behave the same (Ctrl-C +  
> > EOF → Bye):
> 
> So you need to hit ^C^D every time?

yes, on this host both versions act like
