On Wed, Apr 02, 2003 at 06:43:16PM -0800, gavin bowlby wrote: >>Ok. In that event, please provide a simple test case. > >Here's a short program to recreate this problem: > >("main.c") >===================================================== >int main(int argc, char *argv[]) { > > int pid, sid, rc; > > if ((pid = fork()) == 0) { > // child thread > pid = getppid(); > while(1) { > rc = sleep(10); > printf("child is alive...\n"); > if ((sid = getpgid(pid)) == -1) { > printf("exiting child process...rc=2\n"); > exit(2); > } > } > } > else { > // parent thread > while(1) { > rc = sleep(10); > printf("parent is alive...\n"); > // check if our child process has been killed > if ((sid = getpgid(pid)) == -1) > exit(3); > > printf("getpgid of child pid:%d returned >pid:%d\n", pid, sid); > } > } >} >========================================== >and here are the steps I used to find the problem: > >1) bring up Cygwin shell 1 >2) gcc main.c <create executable> >3) a.exe <run executable> >4) let program run 10-15 seconds to see output from > parent and child >5) bring up Cygwin shell 2 >6) ps <to see PIDs of parent and child> >7) kill -9 <child PID> >8) observe that parent continues to run, and sees > the parent's PID reported as the result of the > getpgid > >BTW, the same problem occurs if the parent PID is killed - the child >continues to see that the parent PID is alive.
Try it on UNIX/Linux. Same behavior. The pid exists until you wait() for it. Add a 'waitpid (pid, &stat, WNOHANG);' before the parent's getpgid and the loop will terminate on Cygwin or UNIX. cgf -- Please use the resources at cygwin.com rather than sending personal email. Special for spam email harvesters: send email to [EMAIL PROTECTED] and be permanently blocked from mailing lists at sources.redhat.com -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Bug reporting: http://cygwin.com/bugs.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/