使用ruby system()命令后未捕获SIGINT

时间:2012-02-02 05:02:38

标签: ruby unix fork signals

当我运行下面的红宝石代码时,按ctrl + c将立即停止程序

trap("INT") { exit }
while line = gets; puts line; end

但是,当我在获取之前使用system()命令时,按ctrl + c不会产生任何效果,除非我点击“Enter”。看起来它与system()分叉子进程有关,并且不知何故父进程无法再检测到SIGINT。你将如何更改代码,以便ctrl + c对下面的代码立即生效

trap("INT") { exit }

if system("which ruby > /dev/null")
  puts "ruby is installed"
end

while line = gets; puts line; end

1 个答案:

答案 0 :(得分:0)

这看起来像是在1.9中修复的信号处理中的一个错误,以解决您的问题,在系统调用后定义信号陷阱:

if system("which ruby > /dev/null")
  puts "ruby is installed"
end
trap("INT") { p 'Ciao!'; exit }
while line = gets; puts line; end

不理想,但有效。