From: Shugo Maeda Date: 2007-02-25T23:19:41+09:00 Subject: [ruby-dev:30415] システムコールでブロック中の割り込み処理 前田です。 Urabe Shyouhei wrote: > Shugo Maeda wrote: >> # そういえば、ruby_1_8_5のsignal.cの話はmputさんに伝わってるん >> # でしたっけ。 >> > > 伝わってないっす。詳細希望。 ruby_1_8では直っているんですが、1.8.5では特定のプラットフォーム (自分が確認したのはLinxu)で、flockなどのシステムコールでブロック している時に割り込みが効かない問題があるようです。 trap(:INT) do p :INT exit! end f = open("/tmp/lock", "w") f.flock(File::LOCK_EX) p :locked sleep こんなスクリプトを二つ動かして、後で動かした方でCtrl-Cを押すと再現 します。 ruby_1_8だと:INTと出力して終了しますが、ruby_1_8_5ではflockでロック を獲得して戻って来るまで何も起こりません。 ruby_1_8で修正されたリビジョンは11203ですが、二つある修正のうち、 * signal.c (ruby_signal): don't set SA_RESTART. a backport from the HEAD. [ruby-talk:220937] [ruby-talk:147220] の方が上記の問題の修正です。 -- 前田 修吾