From: KUBO Takehiro Date: 2009-07-29T22:56:06+09:00 Subject: [ruby-list:46240] Re: ruby1.8→1.9でprocess/thread関連でハマった話 2009/7/29 Hidetoshi NAGAI : > 永井@知能.九工大です. > > ちょっと恥ずかしい話ですが,似たような状況でトラブルに合う方も > いらっしゃるかもしれないので書いておきます.(^_^; > > ruby 1.8 で動いていたスクリプトを 1.9 で動かそうとした際の話です. > OS にも依存する話ですので述べておきますと,Linux 2.6.12, gcc 3.3.2 です. 問題の起こる条件について、補足。 この問題は最近の Linux では起こりません。ちょっと古めの Linux を使っている ときに起こる問題です。具体的にはスレッドライブラリとして LinuxThreads が使 用されている場合です。 以下の URL の「POSIX スレッドの Linux での実装」を参照してください。 http://www.linux.or.jp/JM/html/LDP_man-pages/man7/pthreads.7.html この URL によると問題の起こる条件を以下のように場合分けできます。 glibc 2.4 以降 --> NPTL (LinuxThreads はサポート外)、すなわち問題なし。 glibc 2.3.2以降、glibc 2.4より前 --> カーネルのバージョンと設定によって、NPTL だったり、LinuxThreads だったり。 getconf GNU_LIBPTHREAD_VERSION を実行して NPTL, LinuxThreads のどちらなのか確認するのが早道でしょう。 glibc 2.3.1以前 --> LinuxThreads、問題あり。 参照元のURL には「NPTL を利用するには Linux 2.6 カーネルに実装されている 機能が必要」と書いてあるが、これは素のカーネルの場合の話で、ディストリビューショ ンによっては Linux 2.4 カーネルでも NPTL が使用可能になっている場合があります。 例えば Redhat Enterprise Linux ES/AS Release 3 の Linux カーネルは 2.4 ですが NPTL に対応しています。