Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 07 Apr 1999 20:32:55 -0400 (EDT)
From:      Simon Shapiro <shimon@simon-shapiro.org>
To:        freebsd-hackers@freebsd.org
Subject:   wait4 - Proof I am stupid
Message-ID:  <XFMail.990407203255.shimon@simon-shapiro.org>

next in thread | raw e-mail | index | archive | help
Hi Y'll,

Please bear with me:

int x;

pid_t my_pgid;

switch (fork()) {
case 0:
        (void)setpgid(getpid(), getpid());

        my_pgid = getpgrp();

        for (x = 0; x < 10; x++) {
                switch (fork()) {
                case 0:
                        /* Go do something useful */
                        break;
                case -1:
                        /* Ooops! */
                                break;
                default:
                        /* Ignore */
                        break;
                }
        }
        exit(0);
        break;;
case -1:
        /* Ooops! */
        break;
default:
        /* ignore */
        break;
}

/*
 *  So far, this code should (and does) fork a process.
 *  This process (child then changes its process group to something else
 *  than the parent and then forks 10 children.
 *
 *  Now the parent wants to wait for the grandchidren...
 */

x = 10; /* redundant, for demo purposes... */

while (x) {
        pid_t y;
        int   z;

        switch (y = wait4((-1)* my_pgid, &z, NULL)) {
        case 0:
                /* Never happens */
                break;
        case -1:
                /* ALWAYS HAPPENS */
                break;
        default:
                /* Never happens */
                break;
        }
}

Question:  Why?  Obviously I am doing something wrong, but what?

I tried changing just about any argument to the wait4() function.
Eliminating the child and having the grandparent fork and wait for the
chilfren via ``wait(0);'' works.
The chilfren are there and all seems correct;  the children are in a
new process group (different than grandpa's), once the son exits, they
all have ppid of 1, etc.

Any suggestion will be greatly appreciated.

Note:  The ``code'' above is illutration only...

Sincerely Yours,                 Shimon@Simon-Shapiro.ORG
                                             770.265.7340
Simon Shapiro

Unwritten code has no bugs and executes at twice the speed of mouth



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?XFMail.990407203255.shimon>