e: WWW とコンソールの挙動の 違いについて
From: fumiya@cij.co.jp (SATOH Fumiyasu)
Subject: Re: WWW とコンソールの挙動の 違いについて
Message-ID: <63s094$r9l@cij-gw.ykhm.cij.co.jp>
Organization: CIJ - Computer Institute of Japan, Ltd.
Newsgroups: fj.lang.perl
Date: 6 Nov 1997 08:48:36 GMT
References: <63ri2m$918$1@saint.win.or.jp>
子プロセスの標準出力を閉じてみて下さい。
fj.lang.perl の記事 <63ri2m$918$1@saint.win.or.jp>
'97/11/06(木) 13:51:38頃、pooh@super.win.or.jpさんによると:
> if ( $pid = fork )
> {
> printf( "Parent process
\n" ) ;
> }
> elsif ( defined $pid )
> {
> printf( "Child process
\n" ) ;
close(STDOUT); # これを追加
close(STDIN); # これはいらないと思う :-)
> system( "時間のかかる処理" ) ;
> exit 0 ;
> }
***snip***
> ----------------------------------------
> と、表示されすぐにプロンプトが出ます。
> ところがWWWブラウザーで実行すると延々と処理を続けタイムアウトになってしまい
> ます。
親プロセスが終わっても、子プロセスの標準出力が残っているため
Web サーバがここから CGI の出力を読みとろうとします。
あらかじめ出力サイズがわからないため、このパイプが閉じられるまで
読み続ける -> 子プロセスが終了するまで待つためです。