active_record 对 windows 下的信号处理做了什么(我在 mac 上没有看到相同的版本)导致它的行为如此奇怪?例如:
require 'rubygems'
trap("INT"){puts "interrupted"}
puts __LINE__
sleep 5
require 'active_record'
trap("INT"){puts "interrupted again"}
puts __LINE__
sleep 5
当我运行上面的代码(ruby 1.8.6,gem 1.3.1,activerecord 2.2.2)时,我可以在第一次睡眠期间多次点击 ^C,但是在需要 activerecord 之后的第一次中断会导致脚本终止。在上述情况下,陷阱仍然执行,只是无法让程序继续执行。通常。
删除第二个陷阱调用对行为没有任何影响。
真正令人烦恼的是,在某些情况下,陷阱根本无法执行。考虑到这样做的全部目的是让我的代码自行清理(删除它在数据库中的足迹,以便下一个人看到一个理智的状态),这是一个真正的问题。例如:
require 'rubygems'
require 'active_record'
trap("INT"){puts "interrupted"}
puts __LINE__
gets
在看到 puts 后按 ^C 根本不会执行陷阱。
我只在需要 active_record 后才看到这个问题。有解决方法吗?我很想知道这是一个错误还是有某种解释。正如我所说,我在 mac 上对此没有任何问题 - 重复 ^Cs 会导致陷阱 proc 的多次执行。
谢谢...