2009-03-19 5 views
0

の下では動作しません、Cのコードは以下のようになります。のFastCGIクリーンアップコードがmod_fastcgiのとWindowsサーバ上のApacheを使用してWindows

サービスがダウン取られ
void main() { 
    init(); 
    while (FCGI_Accept() >= 0) 
     work(); 
    cleanup(); 
} 

(すなわち:ネット停止apache2の)、プロセスをクリーンアップコードを取得せずに終了します。

私はここで何が欠けていますか?

早期に終了する唯一の方法は、どこかで仕事の内側() "()の終了" を呼び出すことであろう
+0

FCGI_Accept()はナガティス番号を返しますか?または、プロセスを停止するだけですか? – eaanon01

+0

私はプロセスを停止していません。私はapache2のサービスを停止し(net stop apache2)、正しく理解すればFCGI_Accept()に負の値が返されるはずです。 –

答えて

0

(またはFCGI_Accept()...)

編集:

あなたはそれがかもしれないと思う場合FCGI_Accept()にするには、onexit()を使用して "exit()"から呼び出されるコールバックを設定してみてください。少なくともこれは "exit()"が早期に呼ばれたことを確認します。

+0

1.クリーンアップなしで終了したくない(現在のケース)2. FCGI_AcceptはFastCGIフレームワークの一部であり、apacheがコマンドを実行したときに<0を返す必要があります(少なくとも私はそれを理解します)。代わりに、それは打ち切ります... –

+0

"onexit()"を試すことができます - これは、プログラムが終了するときに実行される関数を設定します。 –

4

FCGI_Acceptマンページとthis FAQ entryを読むと、FCGI_Acceptは実際にはApacheのシャットダウン時に-1を返すようです。 SIGUSR1とSIGTERMのシグナルハンドラを設定してみてください。 (Windows特有ではありませんが、試してみる価値があります)on a mailing list, here.

関連する問題