public inbox for cygwin@cygwin.com
 help / color / mirror / Atom feed
* 1.3.20 : getpgid returns pid != -1 when specified pid no longer exists
@ 2003-04-02  3:06 gavin bowlby
  2003-04-02  9:30 ` Corinna Vinschen
  0 siblings, 1 reply; 8+ messages in thread
From: gavin bowlby @ 2003-04-02  3:06 UTC (permalink / raw)
  To: cygwin

$ uname -a
CYGWIN_NT-5.0 reptilicus 1.3.20(0.73/3/2) 2003-02-08
12:10 i686 unknown unknown
Cygwin

Windows 2K box.

Process A creates Process B.

I kill Process B with a "kill -9 <process B's pid>"

Process A then does a:

sid = getpgid(pid));

pid is set to process B's pid

sid is not returned as -1, even though process B no
longer exists, as can be seen with a "ps" command.
This occurs repeatedly.

Is this correct behavior?

Regards,

Gavin Bowlby

gavin_bowlby@yahoo.com




__________________________________________________
Do you Yahoo!?
Yahoo! Tax Center - File online, calculators, forms, and more
http://tax.yahoo.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/

^ permalink raw reply	[flat|nested] 8+ messages in thread
* Re: 1.3.20 : getpgid returns pid != -1 when specified pid no longer exists
@ 2003-04-02 20:20 gavin bowlby
  2003-04-02 20:23 ` gavin bowlby
  2003-04-02 23:24 ` Christopher Faylor
  0 siblings, 2 replies; 8+ messages in thread
From: gavin bowlby @ 2003-04-02 20:20 UTC (permalink / raw)
  To: cygwin, corinna-cygwin

Corinna:

Thanks for your suggestion. Sorry I didn't upgrade
before reporting this problem. I still see the same
problem with 1.3.22.

Here's a console log:

From the parent's perspective: (parent program name is
"pglm" parent's pid=1940, child's program name is
"pglm", child's pid=1624)

getpgid of child pid:1624 returned pid:1940


==============================================
A ps command from another Cygwin shell shows:

gavin@reptilicus /cygdrive/c/cadzilla/pglm
$ ps
      PID    PPID    PGID     WINPID  TTY  UID   
STIME COMMAND
     1232       1    1232       1232  con 1003
11:56:48 /usr/bin/bash
     1964       1    1964       1964  con 1003
11:57:54 /usr/bin/bash
     1940    1232    1940        948  con 1003
12:03:35 /cygdrive/c/cadzilla/pgl
m/pglm
     1624    1940    1940       1624  con 1003
12:03:35 /cygdrive/c/cadzilla/pgl
m/pglm
     1724    1964    1724        732  con 1003
12:03:52 /usr/bin/ps

gavin@reptilicus /cygdrive/c/cadzilla/pglm
$ kill -9 1624

gavin@reptilicus /cygdrive/c/cadzilla/pglm
$ ps
      PID    PPID    PGID     WINPID  TTY  UID   
STIME COMMAND
     1232       1    1232       1232  con 1003
11:56:48 /usr/bin/bash
     1964       1    1964       1964  con 1003
11:57:54 /usr/bin/bash
     1940    1232    1940        948  con 1003
12:03:35 /cygdrive/c/cadzilla/pgl
m/pglm
     2092    1964    2092       1504  con 1003
12:04:32 /usr/bin/ps
===================================================

After the kill -9 1624 is issued, the running parent
process continues to output:

getpgid of child pid:1624 returned pid:1940

after calls to getpgid with a pid of 1624.


gavin@reptilicus /cygdrive/c/cadzilla/pglm
$ uname -a
CYGWIN_NT-5.0 reptilicus 1.3.22(0.78/3/2) 2003-03-18
09:20 i686 unknown unknown
Cygwin


Thanks again for your help,
Gavin Bowlby
(gavin_bowlby@yahoo.com)

======================================================
On Tue, Apr 01, 2003 at 07:06:45PM -0800, gavin bowlby
wrote:
> $ uname -a
> CYGWIN_NT-5.0 reptilicus 1.3.20(0.73/3/2) 2003-02-08
> 12:10 i686 unknown unknown
> Cygwin

Could you test with 1.3.22 please?

Corinna

-- 
Corinna Vinschen                  Please, send mails
regarding Cygwin to
Cygwin Developer                               
mailto:cygwin at cygwin dot com
Red Hat, Inc.

--- gavin bowlby <gavin_bowlby@yahoo.com> wrote:
> $ uname -a
> CYGWIN_NT-5.0 reptilicus 1.3.20(0.73/3/2) 2003-02-08
> 12:10 i686 unknown unknown
> Cygwin
> 
> Windows 2K box.
> 
> Process A creates Process B.
> 
> I kill Process B with a "kill -9 <process B's pid>"
> 
> Process A then does a:
> 
> sid = getpgid(pid));
> 
> pid is set to process B's pid
> 
> sid is not returned as -1, even though process B no
> longer exists, as can be seen with a "ps" command.
> This occurs repeatedly.
> 
> Is this correct behavior?
> 
> Regards,
> 
> Gavin Bowlby
> 
> gavin_bowlby@yahoo.com
> 
> 
> 
> 
> __________________________________________________
> Do you Yahoo!?
> Yahoo! Tax Center - File online, calculators, forms,
> and more
> http://tax.yahoo.com
> 


__________________________________________________
Do you Yahoo!?
Yahoo! Tax Center - File online, calculators, forms, and more
http://tax.yahoo.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/

^ permalink raw reply	[flat|nested] 8+ messages in thread
* Re: 1.3.20 : getpgid returns pid != -1 when specified pid no longer exists
@ 2003-04-03  3:00 gavin bowlby
  2003-04-03  3:05 ` gavin bowlby
  2003-04-03  3:19 ` Christopher Faylor
  0 siblings, 2 replies; 8+ messages in thread
From: gavin bowlby @ 2003-04-03  3:00 UTC (permalink / raw)
  To: cygwin, cgf, corinna-cygwin

>Ok.  In that event, please provide a simple test
case.

Christopher, Corinna:

Thanks for you help on this!

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.

The general problem I'm trying to solve here is:

Given a long-lived parent process and a long-lived
child process, I want the parent and child to be able
to detect if the child or parent has died, and if so,
exit.

Thanks again for your kind assistance.

Gavin Bowlby
<gavin_bowlby@yahoo.com>


__________________________________________________
Do you Yahoo!?
Yahoo! Tax Center - File online, calculators, forms, and more
http://tax.yahoo.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/

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2003-04-03  3:05 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-04-02  3:06 1.3.20 : getpgid returns pid != -1 when specified pid no longer exists gavin bowlby
2003-04-02  9:30 ` Corinna Vinschen
2003-04-02 20:20 gavin bowlby
2003-04-02 20:23 ` gavin bowlby
2003-04-02 23:24 ` Christopher Faylor
2003-04-03  3:00 gavin bowlby
2003-04-03  3:05 ` gavin bowlby
2003-04-03  3:19 ` Christopher Faylor

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).