This is the mail archive of the
cygwin@cygwin.com
mailing list for the Cygwin project.
Re: 1.3.20 : getpgid returns pid != -1 when specified pid no longer exists
- From: Christopher Faylor <cgf-cygwin at cygwin dot com>
- To: gavin bowlby <gavin_bowlby at yahoo dot com>
- Cc: cygwin at cygwin dot com
- Date: Wed, 2 Apr 2003 22:05:51 -0500
- Subject: Re: 1.3.20 : getpgid returns pid != -1 when specified pid no longer exists
- References: <20030403024316.13403.qmail@web21205.mail.yahoo.com>
- Reply-to: cygwin at cygwin dot com
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 aaaspam at sourceware dot org
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/