2009-03-19 3 views
0

Utilisation apache sur un serveur Windows avec mod_fastcgi, le code C ressemble que:FastCGI code de nettoyage ne fonctionne pas sous Windows

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

Lorsque le service est descendu (ex: net stop apache2), le processus se termine sans accéder au code de nettoyage.

Qu'est-ce qui me manque ici?

+0

Le FCGI_Accept() renvoie-t-il un nombre de nagatice? Ou arrêtez-vous le processus? – eaanon01

+0

Je n'arrête pas le processus. Je ralentis le service d'apache (net stop apache2), et cela devrait entraîner le retour de FCGI_Accept() avec une valeur négative, si je comprends bien. –

Répondre

0

La seule façon de sortir prématurément serait être d'appeler "exit()" quelque part dans le travail() (ou FCGI_Accept() ...)

Edit:

Si vous pensez qu'il pourrait soit FCGI_Accept(), essayez d'utiliser onexit() pour configurer un callback appelé depuis "exit()". À tout le moins, cela confirmera que "exit()" a été appelé prématurément.

+0

1. Je ne veux pas quitter sans le nettoyage (ce qui est le cas en ce moment), et 2. FCGI_Accept fait partie de l'infrastructure FastCGI et devrait retourner avec <0 lorsque commandé par apache pour descendre (au moins comme je le comprendre). Au lieu de cela, il abandonne ... –

+0

Vous pourriez essayer d'utiliser "onexit()" - ceci définit une fonction à exécuter quand un programme se termine. –

4

Il semble, à la lecture de la page de manuel FCGI_Accept et this FAQ entry, que FCGI_Accept ne renvoie pas -1 dans le cas d'une fermeture d'Apache. Essayez de définir un gestionnaire de signal pour SIGUSR1 et SIGTERM. Il y a un exemple (non spécifique à Windows, mais ça vaut le coup d'essayer) posté il y a un certain temps on a mailing list, here.

Questions connexes