Re: Terminating subtasks reliably
Re: Terminating subtasks reliably
- Subject: Re: Terminating subtasks reliably
- From: John Harte <email@hidden>
- Date: Tue, 30 Mar 2010 23:18:11 -0400
On Mar 30, 2010, at 4:01 PM, McLaughlin, Michael P. wrote:
> I have a Cocoa app (Leopard) which launches several Foundation Tool subtasks
> (since threads are not sufficient in this case). Currently, I terminate
> these subtasks via the app-delegate method
>
> -(NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication
> *)sender
>
> This works provided one Quits the main app using the Quit menu item.
> However, if I force-quit or if I abort using the Stop icon in Xcode, then
> the main app terminates without terminating the subtasks.
>
> Is there a more reliable hook (e.g., delegate method) that would always get
> called even on force-quit or Stop from Xcode so that these subtasks would
> always get terminated? [Otherwise, I have to terminate them from Activity
> Monitor.]
>
I use kqueue in the child process. Kick off a thread and wait for the parent to terminate.
int main (int argc, char* const argv[]) {
// Start a thread to watch for parent termination
pthread_t thread;
int error = pthread_create (&thread, 0, WatchForTermination, 0);
.
.
.
void* WatchForTermination (void* arg) {
pid_t ppid = getppid (); // get parent pid
int kq = kqueue ();
if (kq != -1) {
struct kevent procEvent; // wait for parent to exit
EV_SET (&procEvent, // kevent
ppid, // ident
EVFILT_PROC, // filter
EV_ADD, // flags
NOTE_EXIT, // fflags
0, // data
0); // udata
kevent (kq, &procEvent, 1, &procEvent, 1, 0);
}
printf ("Terminating--Parent Process Terminated\n");
exit (0);
return 0;
}
_______________________________________________
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