2011-07-05 5 views

Répondre

6

Un zombie est un processus qui s'est terminé mais dont l'achèvement n'a pas encore été remarqué par le processus qui l'a démarré. C'est la responsabilité du processus Twisted de récolter ses enfants.

Si vous démarrez le processus avec spawnProcess, tout devrait toujours fonctionner comme prévu. Cependant, comme décrit dans bug #733 in Twisted (qui a été corrigé depuis longtemps), il existe une pléthore de casse-bords désagréables lorsque vous voulez utiliser Twisted avec d'autres fonctions qui génèrent des processus, car l'API Python rendait difficile la coopération entre les gestionnaires de signaux.

Tout cela est corrigé dans les versions récentes du code, mais je crois que vous pouvez encore rencontrer ce bogue dans les conditions suivantes:

  1. Vous utilisez une version de Twisted plus tôt que 10,1.
  2. Vous utilisez une version de Python antérieure à 2.6.
  3. Vous ne construisez pas les modules d'extension natifs de Twisted (si vous travaillez à partir d'une extraction de développement ou d'une archive tar non compressée plutôt que d'une version installée, vous pouvez corriger cela avec python setup.py build_ext -i). Vous utilisez un module tel que popen ou subprocess.

mise à niveau ou un peu de chance Twisted exécutant la commande appropriée corrigera votre problème immédiat, mais vous devriez toujours envisager d'utiliser spawnProcess, depuis que vous permet de traiter la sortie de processus comme un événement normal dans la boucle d'événements du réacteur.

+1

+1 pour la récolte d'enfants – Jason