¿Cómo usar Popen para ejecutar el proceso backgroud y evitar a los zombies?

Tengo un servidor de escucha que ejecuta un nuevo hilo para cada controlador de cliente. Cada manejador puede usar:

proc = subprocess.Popen(argv, executable = "./Main.py", stdout = _stdout, stderr = subprocess.STDOUT, close_fds=False) 

para ejecutar un nuevo proceso en segundo plano, después de lo que se termina el hilo del controlador.

Una vez finalizado el proceso en segundo plano, se mantiene en estado Z. ¿Es posible pedir a subprocess.Popen () que maneje SIG_CHILD para evitar a este zombie?

No quiero leer el estado del proceso utilizando proc.wait (), ya que para esto tengo que guardar la lista de todos los procesos en segundo plano en ejecución …

UPD

Necesito ejecutar algunos procesos en segundo plano evitando a los zombies y ejecutar algunos procesos con .communicate () para leer datos de estos procesos. En ese caso, usando el truco de señal de koblas obtengo un error:

 File "./PyZWServer.py", line 115, in IsRunning return (subprocess.Popen(["pgrep", "-c", "-x", name], stdout=subprocess.PIPE).communicate()[0] == "0") File "/usr/lib/python2.6/subprocess.py", line 698, in communicate self.wait() File "/usr/lib/python2.6/subprocess.py", line 1170, in wait pid, sts = _eintr_retry_call(os.waitpid, self.pid, 0) File "/usr/lib/python2.6/subprocess.py", line 465, in _eintr_retry_call return func(*args) OSError: [Errno 10] No child processes Error happened during handling of client 

Si agrega un manejador de señales para SIGCHLD, el kernel manejará la pieza de espera / cosecha.

Específicamente la línea:

 signal.signal(signal.SIGCHLD, signal.SIG_IGN) 

Cuidará a tus zombis.