From: Tanaka Akira Date: 2008-12-30T01:10:38+09:00 Subject: [ruby-dev:37659] [Bug:trunk] trap(:USR1, "EXIT") doesn't in effect when sysread is interputted 以下のプログラムのように、trap で USR1 に EXIT と設定してあっ た時、SIGUSR1 で割り込まれた時に EINTR になってしまいます。 % ./ruby -ve ' r,w = IO.pipe pid = fork { trap(:USR1, "EXIT") r.sysread(4096) } sleep 1 Process.kill(:USR1, pid) Process.wait(pid) ' ruby 1.9.1 (2008-12-29 patchlevel-5000 trunk 21182) [i686-linux] -e:5:in `sysread': Interrupted system call (Errno::EINTR) from -e:5:in `block in
' from -e:3:in `fork' from -e:3:in `
' 1.8 では、EXIT の指定どおり、EINTR になることなく、終了します。 % ruby-1.8 -ve ' r,w = IO.pipe pid = fork { trap(:USR1, "EXIT") r.sysread(4096) } sleep 1 Process.kill(:USR1, pid) Process.wait(pid) ' ruby 1.8.7 (2008-12-26 revision 21066) [i686-linux] -- [田中 哲][たなか あきら][Tanaka Akira]