Defunct Processes With subprocess.Popen

J

John Abel

Hi!

I'm currently writing a script which launches external programs, but it
keeps leaving zombie/defunct processes behind, until I kill the
launching script, which is a bit of a pain, as it's supposed to be a
daemon. The code I'm using is:

newPid = subprocess.Popen( cmdLine[ 1: ], executable=cmdLine[ 0 ],
close_fds=True ).pid

I've tried calling it using the shell=True flag, but that leaves a
zombie for the sh, instead. I'm not interested in any output, the only
thing I need returning, is the pid of the new process. I've tried using
spawn*, with the same results. Does anyone have any ideas?

Thanks.

J
 
M

Mike Meyer

John Abel said:
Hi!

I'm currently writing a script which launches external programs, but
it keeps leaving zombie/defunct processes behind, until I kill the
launching script, which is a bit of a pain, as it's supposed to be a
daemon. The code I'm using is:

newPid = subprocess.Popen( cmdLine[ 1: ], executable=cmdLine[ 0 ],
close_fds=True ).pid

I've tried calling it using the shell=True flag, but that leaves a
zombie for the sh, instead. I'm not interested in any output, the
only thing I need returning, is the pid of the new process. I've
tried using spawn*, with the same results. Does anyone have any ideas?

The processes are hanging around in a zombie state so the parent (or
someone) can get their exit status.

Try calling os.wait() until it returns the exit status for all the
processes you've started.

<mike
 
J

John Abel

Mike said:
Hi!

I'm currently writing a script which launches external programs, but
it keeps leaving zombie/defunct processes behind, until I kill the
launching script, which is a bit of a pain, as it's supposed to be a
daemon. The code I'm using is:

newPid = subprocess.Popen( cmdLine[ 1: ], executable=cmdLine[ 0 ],
close_fds=True ).pid

I've tried calling it using the shell=True flag, but that leaves a
zombie for the sh, instead. I'm not interested in any output, the
only thing I need returning, is the pid of the new process. I've
tried using spawn*, with the same results. Does anyone have any ideas?

The processes are hanging around in a zombie state so the parent (or
someone) can get their exit status.

Try calling os.wait() until it returns the exit status for all the
processes you've started.

<mike
Ahh, OK. Thanks for that. Works now.

J
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,013
Latest member
KatriceSwa

Latest Threads

Top