[#37021] [RAA] RAA/2.3 — "U.Nakamura" <usa@...>

みなさんこんにちは。

20 messages 2003/01/30

[ruby-list:36898] Re: ruby 1.8.0 (server lock?)

From: em6t-kbt@...
Date: 2003-01-06 13:58:49 UTC
List: ruby-list #36898
久保田です。

新年あけましておめでとうございます。

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/

In This Thread

Prev Next