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 の出力を読みとろうとします。 あらかじめ出力サイズがわからないため、このパイプが閉じられるまで 読み続ける -> 子プロセスが終了するまで待つためです。