2009-03-19 28 views
0

Verwendung von Apache auf einem Windows-Server mit mod_fastcgi sucht der C-Code wie folgt aus:FastCGI Bereinigungscode nicht unter Windows funktioniert

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

Wenn der Dienst heruntergenommen (dh: net stop apache2), den Prozess beendet, ohne zu dem Bereinigungscode zu gelangen.

Was fehlt mir hier?

+0

Nun gibt die FCGI_Accept() jemals eine Nagatice-Nummer zurück? Oder halten Sie den Prozess einfach an? – eaanon01

+0

Ich halte den Prozess nicht auf. Ich nehme den Service von Apache herunter (net stop apache2), und das sollte FCGI_Accept() veranlassen, mit einem negativen Wert zurückzugeben, wenn ich es richtig verstehe. –

Antwort

0

Die einzige Möglichkeit, vorzeitig zu beenden wäre zu nennen "exit()" irgendwo in Arbeit() (oder FCGI_Accept() ...)

Edit:

Wenn Sie denken, es könnte sei FCGI_Accept(), versuche mit onexit() einen Callback einzurichten, der von "exit()" aufgerufen werden soll. Zumindest wird dies bestätigen, dass "exit()" vorzeitig aufgerufen wurde.

+0

1. Ich möchte nicht ohne die Bereinigung beenden (was gerade der Fall ist), und 2. FCGI_Accept ist Teil des FastCGI-Frameworks und sollte mit <0 zurückkehren, wenn Apache angewiesen wird, herunterzufahren (mindestens wie I es verstehen). Stattdessen wird abgebrochen ... –

+0

Sie könnten versuchen, "onexit()" zu verwenden - das legt eine Funktion fest, die ausgeführt werden soll, wenn ein Programm beendet wird. –

4

Es scheint, aus dem Lesen der FCGI_Accept Manpage und this FAQ entry, dass FCGI_Accept tatsächlich -1 zurückgibt im Fall von Apache Shutdown. Versuchen Sie, einen Signalhandler für SIGUSR1 und SIGTERM festzulegen. Es gibt ein Beispiel (nicht Windows-spezifisch, aber es ist einen Versuch wert) gepostet vor einer Weile on a mailing list, here.

Verwandte Themen