新規記事投稿 フォロー記事投稿 記事のキャンセル
From: にあ <nir@mxa.meshnet.or.jp>
Subject: Re: 時間のかかるcgiの挙動
Date: 1997/11/13 14:25:44
Reference: mesh.program/00413

11月13日に、BEROさんは書きました。

>時間のかかるcgiが動作しているとき、ブラウズしている人が「遅い」とかいって「中止」とか
>「別のページを見る」とかしたら、cgiプロセスはどうなるのでしょう?
>
HTTPサーヴァの実装による様です。

>1.httpサーバがkill
>
サーヴァプログラムによってはtimeoutが設定してあって、そのうちkillされる
ようです。Apacheなんかはそうでなかったかなぁ (チョット不確か)

>2.とりあえずstdoutをnullかなんかにして処理は続ける
>
もしもCGIがSTDOUTに出力すると、出力先のpipeが無くなっているので、
即座にSIGPIPEを食らって死ぬようです。

>3.(cgiをちゃんと作ってないと)死体が残る
>
killが来るサーヴァなら普通は平気なのですが、I/O待ちとかfilelockとか、
システム側のwaitで止まっているとHTTPサーヴァからのkillが届かないで
残ってしまう事があるようですね。

killが来ないサーヴァでSTDOUTにも書かないでいると、残るでしょうね。
# 良くブロックモードflock()よるCGI事故の話は聞きますよね。(^^;;

>それともcgiから別プロセスを駆動して、cgiは適当なもの返してとっとと終了した方が
>いいのかな?
>
うちで、WWW統計など時間のかかるCGIを動かす時は別プロセス起動にしています。
# もちろん自分でalarm()かけて、timeoutしたプロセスが残らない様にしています。