From: em6t-kbt@... Date: 2003-01-06T22:58:49+09:00 Subject: [ruby-list:36898] Re: ruby 1.8.0 (server lock?) 久保田です。 新年あけましておめでとうございます。 From: nobu.nakada@nifty.ne.jp Subject: [ruby-list:36868] Re: ruby 1.8.0 (server lock?) Date: Sun, 29 Dec 2002 04:52:39 +0900 > なかだです。 どうも、返事が遅くてすいません。 > > > プロセ > > > スをバックグラウンドで走らせたいなら、先に fork && exit する必 > > > 要があります。 > > > > プログラムを下記のように変更して、無事動きました。exitはruby > > のコマンドかと思ったのですが、普通のプロセスの終了のことなん > > ですな。 > > その二つをどう区別されてるのかよく分かりませんが、exitは自分自 > 身のプロセスを終了させるメソッドです。 fork && exitという書き方を知らず、fork {} という形で実行すれ ば、exitというコマンドは要らないと思ったので上のような書きか たになりました。 > 最初([ruby-list:36842])のコードの動作を説明すると、スレッド(T1) > が分岐した後、メインスレッド(T0)でforkします。ここで、親プロセ > スのほうはブロックに入らずに次に進みますが、そこでコードは終り > なのでメインスレッドおよびプロセスは終了します。子プロセスのT1' > は、1.6なら生きているのですが1.8では消滅してしまって、残ったメ > インスレッドT0'だけがずっとsleepし続けることになります。 > > T0 ----+------------------+-------> exit > | Thread.start | fork > T1 +----> open -------|+------> exit > || > 親プロセス || > ......................v|.............. > 子プロセス |v > || > T0' +-------> sleep > | (1.6のみ) > T1' +--> open ... > > もし親プロセスがexitせずに動き続けた場合、T1とT1'の両方がopenし > ようとすることになります。1.8では、メイン以外のスレッドを終了さ > せることで、こういった競合をとりあえず回避しようとしています。 久保田は、ずっとT1'というスレッドが存在している事に気づきま せんでした。T1のスレッドが1.6では生き続け、1.8では死ぬことに 変更されたのだと解釈していたので、ずれがあったようです。 > fork && exit # 親プロセスを終了 > # Process.setsid # デーモン化する場合 > Thread.start do > # .... > end > sleep この書き方は知りませんでした。参考になります。 それでは、どうもありがとうございました。 ---------------------------------------------- 久保田俊也 E-mail:em6t-kbt@asahi-net.or.jp http://www.asahi-net.or.jp/~em6t-kbt/