From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?=) Date: 2007-03-16T13:22:24+09:00 Subject: [ruby-dev:30599] Re: [BUG] waitpid for ruby-trunk けいじゅ@いしつかです. In [ruby-dev:30598] the message: "[ruby-dev:30598] Re: [BUG] waitpid for ruby-trunk", on Mar/16 12:47(JST) Nobuyoshi Nakada writes: >なかだです。 >Linux 2.4でしょうか。2.6だと正常に終了します。 その通りです. >たぶん、pthread_kill()が正しい相手に届いてないんじゃないかと想 >像しますが。 > >-DTHREAD_DEBUG=-1をつけてコンパイルして、先頭に > Thread.DEBUG = true >をいれてテストしてみてください。 Thread.DEBUG= はないとエラーが出ました. Thread::DEBUG = 1 で実行しまし た. ># -DTHREAD_DEBUG=1 はminirubyまでにしといたほうが無難。 何となく理解(^^; 結果は以下の感じです. これでわかります? ちなみにテストスクリプトは変更 していて: p1 = fork{exec "sleep", "10"} p2 = fork{exec "sleep", "10"} となっています. -- emperor:/home/keiju/var/src/var.lib/ruby/RubyBase/ruby-trunk# ./ruby /tmp/test-waitpid.rb 0x4000 - rb_thread_wait_fd_rw(5, read) 0x4000 - enter blocking region (0x81748d8) 0x4000 - leave blocking region (0x81748d8) 0x4000 - rb_thread_wait_fd_rw(5, read): done 0x4000 - rb_thread_wait_fd_rw(5, read) 0x4000 - enter blocking region (0x81748d8) 0x4000 - leave blocking region (0x81748d8) 0x4000 - rb_thread_wait_fd_rw(5, read): done 0x4000 - create - stack size: 524288 0x4000 - create: 0x8181510 (0)0x4000 - create - stack size: 524288 0x8003 - thread start: 0x8181510 0xc004 - thread start: 0x8186178 0x4000 - create: 0x8186178 (0)0x4000 - rb_thread_schedule 0x4000 - rb_thread_alone: 3 0x4000 - rb_thread_schedule/switch start 0x8003 - thread start (get lock): 0x8181510 0x8003 - rb_thread_wait_fd_rw(1, write) 0x8003 - enter blocking region (0x8181510) 0xc004 - thread start (get lock): 0x8186178 0xc004 - rb_thread_wait_fd_rw(1, write) 0xc004 - enter blocking region (0x8186178) 0x8003 - leave blocking region (0x8181510) 0x8003 - rb_thread_schedule 0x8003 - rb_thread_alone: 3 0x8003 - rb_thread_schedule/switch start 0x4000 - rb_thread_schedule/switch done 0x4000 - native_sleep 20 0x4000 - native_sleep: pthread_cond_timedwait start (1174018444, 497774000) 0x8003 - rb_thread_schedule/switch done 0x8003 - rb_thread_wait_fd_rw(1, write): done wait p#1 wait p#2 0x8003 - enter blocking region (0x8181510) 0x8003 - leave blocking region (0x8181510) 0x8003 - rb_thread_wait_fd_rw(1, write) 0x8003 - enter blocking region (0x8181510) 0x8003 - leave blocking region (0x8181510) 0x8003 - rb_thread_wait_fd_rw(1, write): done # 0x8003 - thread end: 0x8181510 0xc004 - leave blocking region (0x8186178) 0xc004 - rb_thread_wait_fd_rw(1, write): done 0xc004 - enter blocking region (0x8186178) 0xc004 - leave blocking region (0x8186178) 0xc004 - rb_thread_wait_fd_rw(1, write) 0xc004 - enter blocking region (0x8186178) 0xc004 - leave blocking region (0x8186178) 0xc004 - rb_thread_schedule 0xc004 - rb_thread_alone: 2 0xc004 - rb_thread_schedule/switch start 0xc004 - rb_thread_schedule/switch done 0xc004 - rb_thread_wait_fd_rw(1, write): done # 0xc004 - thread end: 0x8186178 > __ ---------------------------------------------------->> 石塚 圭樹 <<--- ---------------------------------->> e-mail: keiju@ishitsuka.com <<---