1

mod_fastcgiを使用してWindowsサーバーでApacheを使用すると、Cコードは次のようになります。

void main() {
    init();
    while (FCGI_Accept() >= 0)
        work();
    cleanup();
}

サービスが停止すると(つまり、net stop apache2)、プロセスはクリーンアップコードに到達せずに終了します。

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

4

2 に答える 2

4

FCGI_Acceptマンページとこの FAQ エントリを読むとFCGI_Accept、実際には Apache がシャットダウンした場合に -1 を返さないようです。SIGUSR1 と SIGTERM のシグナル ハンドラを設定してみてください。少し前にメーリング リストに投稿された例があります (Windows 固有ではありませんが、試してみる価値があります) 。

于 2009-04-24T20:10:27.860 に答える
0

途中で終了する唯一の方法は、work() (または FCGI_Accept()...) 内のどこかで「exit()」を呼び出すことです。

編集:

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

于 2009-03-22T22:42:32.993 に答える