新規記事投稿
フォロー記事投稿
記事のキャンセル
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したプロセスが残らない様にしています。