[kansaipm] use & fork

Yasushi Nakajima nakajima at netstock.co.jp
Sun Oct 5 04:29:43 CDT 2003


SUGITA> これは、子プロセスでuseされたものに関しても同様でしょうか?
SUGITA> 
SUGITA> apacheの*.confで初期ロードするモジュールを全く指定しないとして
SUGITA> cgiスクリプト自身やスクリプト中でuseしたモジュールはリクエストを受取った
SUGITA> プロセスがコンパイル/格納して、それ以外のapacheプロセスにはコンパイル結果は
SUGITA> 伝播(という言い方が適当かどうかわかりませんが)していないように
SUGITA> 思えるのですが。

 その理解で正しいと思います。そして、複数待機しているどの子プロセスにリ
クエストがわたるかはApacheの親プロセス任せになります。ですので、杉田さん
の用途のように毎回いろんなスクリプトをevalしてその中でどんなモジュールが
useされるかもあらかじめ決められないとなると、ちょっと最後の一押しが足り
ない感じになりますね。つまり、Foo.pmを読み込み済みの子プロセスがあったと
して、次にuse Foo;するスクリプトをevalするようなリクエストがあっても、そ
のリクエストが他の(Foo.pmはまだ読み込んでいない)子プロセスに回されてし
まうかもしれない…。

 これを完璧にやりたいとなると、やはり自前で子プロセスを管理するしかない
でしょう。

・各子プロセスは、リクエストされたコードをevalして結果を返したら、終了せ
  ずに待機状態になるように作っておく
・親プロセスは、リクエストされたコードの中でuseしているモジュールを調べ
  て、どの子プロセスでどのモジュールをuseしたかのリストを保持し、そして
  そのモジュールを過去にuseしている待機中の子プロセスにリクエストを渡す

 子プロセスの状態をきちんと管理するプログラムを書くのは結構ホネかもしれ
ません。親子間のコミュニケーションも(現実世界と同様)いろいろ工夫のしど
ころがありそうです。まぁ、古典的な問題とも言えますが。

 なお、ちょっと別の話になりますが、どんなコードがリクエストされるかわか
らないとなると、Safe環境の中で使える機能を制限した状態でevalした方がいい
と思います。でないとサーバーの中を好きにいじられてしまう危険があるでしょ
う。

-- 
Yasushi Nakajima <nakajima at netstock.co.jp>




More information about the Kansai-pm mailing list