subprocess leaves child living

Michael Bentley michael at jedimindworks.com
Tue Jun 5 18:13:43 EDT 2007


On Jun 5, 2007, at 4:17 PM, Thomas Dybdahl Ahle wrote:

> Den Tue, 05 Jun 2007 15:46:39 -0500 skrev Michael Bentley:
>
>> But actually *that* is an orphan process.  When a parent process dies
>> and the child continues to run, the child becomes an orphan and is
>> adopted by init.  Orphan processes can be cleaned up on most  
>> Unices with
>> 'init q' (or something very similar).
>
> Is it not possible to tell python that this process should not be  
> adopted
> by init, but die with its parrent?
> Just like terminals seem to do it..

Well, the way you posed the original question:

> from subprocess import Popen
> popen = Popen(["ping", "google.com"])
> from time import sleep
> sleep(100)

is really what adoption by init is designed to handle. Here you've  
created a child but have not waited for its return value.  Like a  
good adoptive parent, init will wait(2) for the child.

I think if you really looked into it you'd find that the terminal had  
called wait(2) before it was killed.  Similarly, if you start a long- 
running subprocess in python and wait for it to return -- killing the  
parent will slaughter the child as well.

hth,
Michael
---
Let the wookie win.






More information about the Python-list mailing list