(Cで作成した)CGIは必ず正常終了するかどうか
[上に]
[前に]
[次に]
電話チーム
2000/06/07(水) 19:09:00
質問があります。
ある商用のサーバで以下のようなことをしたいと思っています。
・CGIはCで作成する。
・CGIが大量に起動されないように起動制限を行う。
・起動制限は以下のように行う。
− 起動されたCGIはまず最初に共有メモリに格納されている
「起動されたCGIの数」を読み込む。
a) その数が制限以内であれば 共有メモリ内の
「起動されたCGIの数」を1加算し、要求に対する処理を
行う。最後に「起動されたCGIの数」を1減算する。
b) 制限以上であれば要求の処理は行わず終了する。
ということなのですが、
CGIというのは何らかの理由(例えばhttpdが落ちるとか)で
強制終了されてしまうことがありますか?
(つまり、CGIの起動数を1加算した後でCGIが強制終了し、
起動数を減算できないことを避けたい)
※ 何らかの理由 というのは、サーバ内で勝手に発生したことではなく、
「ユーザが何かの操作を行うことによって」の理由です。
以上よろしくお願いします。
Fuji.♪
[E-Mail]
[HomePage]
2000/06/07(水) 19:18:39
ユーザが何かの操作を行う事によって終了するか、ですか?
killされたりタスクマネージャから強制的に落とされたら強制終了すると思いますが。
boolean
2000/06/07(水) 19:46:36
>CGIというのは何らかの理由(例えばhttpdが落ちるとか)で
と
>※ 何らかの理由 というのは、サーバ内で勝手に発生したことではなく、
> 「ユーザが何かの操作を行うことによって」の理由です。
のつじつまが合わない気がするのですが...
ユーザが何かの操作を行うことによってhttpdは落ちないでしょうし、
CGIを強制終了することも出来ないでしょう。
「ユーザが何かの操作を行うことによって」という事で考えられるのは、
CGIが想定していない大量のデータをフォームに入力して送信し、CGIが
起動数を減算するまえにコアダンプするとか。
B-Cus
2000/06/08(木) 02:10:50
# ちょっと前にも書いたけど
うちの apache では、パイプ宛に出力しているときに、ブラウザ側で
読み込みを中断したら、SIGTERM が送られてきました。なので、
> CGIというのは何らかの理由(例えばhttpdが落ちるとか)で
> 強制終了されてしまうことがありますか?
ありえます。
まぁ、www サーバ次第なので、環境を書かないことには何とも。
boolean
2000/06/08(木) 09:15:10
>うちの apache では、パイプ宛に出力しているときに、ブラウザ側で
>読み込みを中断したら、SIGTERM が送られてきました。
>ありえます。
あ...そうなんだ。(^^ゞ
パイプ宛てに出力しているときですか...
ちょっと試してみよう。
うちの環境は、Netscape Enterprise Serverです。
boolean
2000/06/08(木) 10:45:56
↑一応試してみたので御報告。
プログラム組むのが面倒なんで、shスクリプトでテスト。
これで、
>パイプ宛に出力しているときに
と同じ状況のはず。(多分...)
で、結果は読み込み中断でシグナルは飛んでこなかった。
(単体で動かして強制終了すれば飛んでくる)
#!/bin/sh
trap 'echo SIGINT; exit' 2
trap 'echo SIGTERM; exit' 15
echo "Content-type:text/html\n\n"
echo "<html><body>test"
find / -name *.html | grep index
echo "</body></html>
B-Cus
2000/06/08(木) 12:40:09
> find / -name *.html | grep index
僕は
open(OUT,"|cat");
print OUT "hoge\n";
sleep 10;
close(OUT);
というような感じでやりました。
電話チーム
2000/06/08(木) 17:05:19
[[解決]]
そうですか。
シグナルが飛んでくることがあるんですか。
どんなシグナルがくるかを調べる方法などは
あるのですか?
でもとても参考になりました。
ありがとうございました。
[上に]
[前に]
[次に]