(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
[[解決]]
そうですか。
シグナルが飛んでくることがあるんですか。
どんなシグナルがくるかを調べる方法などは
あるのですか?

でもとても参考になりました。
ありがとうございました。

[上に] [前に] [次に]