J'utilise supervisord pour générer et gérer une application FastCGI que j'écris en C pour une cible Linux. J'ai un gestionnaire de signal qui quitte gracieusement mon application quand SIGINT est reçu. J'ai vérifié que le gestionnaire de signal fonctionne comme souhaité en exécutant l'application dans une fenêtre de terminal et en émettant Ctrl-C pour quitter.Transmission de signal aux processus gérés à l'aide du superviseur
Lors de l'émission d'une commande « d'arrêt » à supervisord (via supervisorctl), il semble que supervisord ne peut pas forcer l'application à quitter sans invoquer SIGKILL:
2010-08-20 10:02:49,661 INFO waiting for cse to die
2010-08-20 10:02:52,665 INFO waiting for cse to die
2010-08-20 10:02:55,669 INFO waiting for cse to die
2010-08-20 10:02:58,672 INFO waiting for cse to die
2010-08-20 10:02:59,673 WARN killing 'cse' (2031) with SIGKILL
2010-08-20 10:02:59,674 INFO stopped: cse (terminated by SIGKILL)
je suit dans mon supervisord.conf fichier
stopsignal=INT
Il est mon hypothèse que supervisord questions « stopsignal » à l'invocation de la commande d'arrêt, alors je prends les déclarations INFO comme une indication que mon application ne répond pas à l'SIGINT émis par supervisord.
Comment procéder pour déboguer le signal passant entre supervord et mon application?
Je confirme que INT est émis à l'invocation de la commande d'arrêt, de sorte que le "... en attendant que cse meure" Les entrées du journal indiquent clairement que l'application ne voit pas SIGINT. – HikeOnPast