exec()'s behavior when ppid == 1

Christopher Faylor cgf@redhat.com
Tue Jun 3 02:33:00 GMT 2003


On Mon, Jun 02, 2003 at 09:42:53PM -0400, Pierre A. Humblet wrote:
>At 09:10 PM 6/2/2003 -0400, Christopher Faylor wrote:
>>On Mon, Jun 02, 2003 at 08:21:33PM -0400, Pierre A. Humblet wrote:
>>>Chris,
>>>
>>>When Windows spawns a Cygwin process A, A has ppid 1 and ppid_handle 0.
>>>If process A execs B, Cygwin keeps A alive. If B then execs C, B stays 
>>>alive too. When C terminates, B and A follow suit and Windows goes on its
>way.
>>>So far so good.
>>>
>>>Now suppose that A forks X and A terminates. Windows goes on its way
>>>right away.
>>>Meanwhile X (which now has ppid 1 but a non zero ppid_handle) execs B
>>>and X is kept alive. If B execs C, B is also kept alive. When C 
>>>terminates, B and X follow suit.
>>>
>>>Q: Why does it help to keep X and B alive until C terminates?
>>
>>I'd prefer this patch, if it still works as desired.
>>It seems to in my limited testing.
>
>Right, that's cleaner. It seems to work fine here also.

Ok.  I'll check that in.  Someday I have to fix that process A, B, C
all stay around problem, too.  I've had an idea about how to do that
for years.

Thanks for noticing this, btw.  I suspect that this hanging behavior
has probably caused some head scratching on the cygwin mailing list
for a while.

cgf



More information about the Cygwin-developers mailing list