From: WATANABE Tetsuya Date: 2000-05-30T13:56:51+09:00 Subject: [ruby-dev:9909] Re: timeout.rb 渡辺哲也です。 In message "[ruby-dev:9860] Re: timeout.rb" on 00/05/26, Wakou Aoyama writes: |青山です。 |Thread 中の最初の処理である sleep にも行き着いていません。 関連している話題だと思うのですが。 Linux 2.2 系、ruby-1.5.4 2000-05-28 での 現象です。2000-05-25 では起きません。 これで、Thread ないの処理がいっさい実行 されません。 strace した場合、socket 関係のシステムコー ルも発行されていません。 ------------------------------ require 'socket' require 'thread' require 'timeout' arr = [] Thread.start do arr.push(Thread.current) http = false is_timeout = timeout(10) { http = TCPSocket.open('localhost', 'http') } http.print 'GET /', "\r\n" while l = http.gets print l end end sleep 3 arr.each do |a| a.join end ------------------------------ require 'timeout' よりあとの strace の出 力です。 ------------------------------ read(4, "#\n# timeout.rb -- execution time"..., 4096) = 855 read(4, "", 4096) = 0 close(4) = 0 munmap(0x2aabe000, 4096) = 0 rt_sigaction(SIGVTALRM, {0x805e758, [], SA_RESTART|0x4000000}, NULL, 8) = 0 setitimer(ITIMER_VIRTUAL, {it_interval={0, 10000}, it_value={0, 10000}}, NULL) = 0 brk(0x80fe000) = 0x80fe000 brk(0x8100000) = 0x8100000 brk(0x8105000) = 0x8105000 brk(0x810a000) = 0x810a000 time(NULL) = 959660989 gettimeofday({959660989, 853914}, NULL) = 0 gettimeofday({959660989, 853973}, NULL) = 0 select(1, [], [], [], {0, 0}) = 0 (Timeout) time(NULL) = 959660989 gettimeofday({959660989, 854435}, NULL) = 0 gettimeofday({959660989, 854492}, NULL) = 0 select(1, [], [], [], {0, 0}) = 0 (Timeout) rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 gettimeofday({959660989, 855076}, NULL) = 0 select(1, [], [], [], {2, 999359}) = 0 (Timeout) gettimeofday({959660992, 846434}, NULL) = 0 select(1, [], [], [], {0, 8000}) = 0 (Timeout) gettimeofday({959660992, 856368}, NULL) = 0 select(1, [], [], [], {0, 0}) = 0 (Timeout) time(NULL) = 959660992 close(2) = 0 close(1) = 0 close(0) = 0 _exit(0) = ? ------------------------------ 正常パターンでは、timeout.rb の処理の後 socket 関係の処理をはじめるのですが... -- WATANABE Tetsuya e-mail: Tetsuya_WATANABE@hp.com tetsu@jpn.hp.com