什麼是active_record對windows下的信號進程做了什麼(我沒有在mac上看到與這個版本相同的版本),導致它表現得如此奇怪?例如:Ruby,windows,active_record和Control-C
require 'rubygems'
trap("INT"){puts "interrupted"}
puts __LINE__
sleep 5
require 'active_record'
trap("INT"){puts "interrupted again"}
puts __LINE__
sleep 5
當我運行上面的代碼(紅寶石1.8.6,1.3.1寶石,ActiveRecord的2.2.2)我可以打^ C多次,我先睡一覺期間喜歡,但在activerecord要求之後的第一個中斷會導致腳本終止。在上述情況下,陷阱仍然執行,它只是不能讓程序繼續。通常。
刪除第二次陷阱調用對行爲沒有任何影響。
真正的煩惱是,在某些情況下,陷阱根本無法執行。考慮到這樣做的關鍵是讓我的代碼自行清理(刪除其在數據庫中的足跡以便下一個人看到一個理智的狀態),這是一個真正的問題。例如:
require 'rubygems'
require 'active_record'
trap("INT"){puts "interrupted"}
puts __LINE__
gets
看到投入後按^ C將根本不執行陷阱。
我只看到這個問題後,需要active_record。有沒有解決方法?我很想知道這是否是一個錯誤,或者是否有某種解釋。正如我所說的,我沒有任何問題在mac上重複的^ Cs導致多次執行陷阱過程。
感謝...
嘿,它是Windows上的Ruby。只是很高興,它沒有設置你的機器着火(我認爲他們修復了這個bug在1.4)。 – Pesto 2009-04-15 23:55:02
只是好奇,但爲什麼有必要捕捉任何SIGINT,而不是搶救你的代碼的一部分ruby的中斷異常?也許縮小你的解決方案以適應長時間運行的過程就足夠了,而不是在代碼中的任何地方捕捉任何* SIGINT *。 – 2010-01-20 19:42:49