Re: NSTask and process group IDs
Re: NSTask and process group IDs
- Subject: Re: NSTask and process group IDs
- From: Nir Soffer <email@hidden>
- Date: Wed, 12 Mar 2008 01:53:42 +0200
On Mar 12, 2008, at 01:24, Hamish Allan wrote:
I'm writing an app that uses an NSTask to spawn a long-lived process.
When my app is force-quit or otherwise SIGKILLed, the spawned process
gets re-parented and hangs around indefinitely. I was hoping to use
process groups to tackle this, but although setpgid() reports success,
it doesn't seem to have had any effect. Here is the code I am using:
myTask = [[NSTask alloc] init];
// ...snipped code for setting up path, args, pipes for
stdin/stdout/stderr, etc...
pid_t pgrp = setpgrp();
if (pgrp < 0)
{
NSLog(@"could not create new pgrp");
pgrp = getpgrp();
}
[myTask launch];
pid_t taskpid = [myTask processIdentifier];
int res = setpgid(taskpid, pgrp);
pid_t newpgrp = getpgid(taskpid);
NSLog(@"pgrp = %d, res = %d, newpgrd = %d", pgrp, res, newpgrp);
The call to setpgrp() is successful (the parent process has the same
pgid as its pid) and the NSLog reports "pgrp = 3166, res = 0, newpgrd
= 3166". However, "ps -xj" reports that the child process does not
have 3166 as its pgid (FWIW, it has pid/ppid/pgid 3167/3166/3167).
What am I missing here? Has anyone else had any success setting the
process group on a process spawned using NSTask?
I also failed to do this :-)
My solution was to open a pipe to the child process, and have the
child process read from the pipe in the background. When the parent
process die, the pipe will be closed and the child can quit.
Best Regards,
Nir Soffer
_______________________________________________
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