Re: Terminating subtasks reliably
Re: Terminating subtasks reliably
- Subject: Re: Terminating subtasks reliably
- From: Dave Keck <email@hidden>
- Date: Sat, 3 Apr 2010 02:32:38 -1000
> Call getppid, set up the kevent listener, then before you actually
> block in kevent, call getppid *again*. If the answer matches the first
> call, then you can go ahead and call kevent. If the answer doesn't
> match, you've hit the race condition you outline here, your parent is
> dead, and you can exit immediately. If the parent quits after the
> second getppid but before the call to kevent, you should still get the
> exit notification because you registered it before the parent quit.
Ah - that should do it.
I was skeptical though, so I took a peek at the kernel's
exiting-process code
(http://www.opensource.apple.com/source/xnu/xnu-1504.3.12/bsd/kern/kern_exit.c);
indeed it looks like this technique is free from races, due to
proc_exit() both issuing the NOTE_EXIT event and putting the exiting
process in a reapable state _after_ all children of the exiting
process have been reparented by launchd.
For the archives: http://pastie.org/901581
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden