Hi folks,

i am writing a program that:

0) manages to handle sigchld signals,
1) creates 100 process
2) put the childs to sleep 1 second
3) loops (the parent process) until 100 child process have been died.

It is not working, why ?

Thanks for you time and cooperation.

Best regards,
Fried.


PS: the source code below:

#include <sys/types.h>
#include <sys/wait.h>

#include <signal.h>
#include <stdio.h>
#include <unistd.h>

unsigned long   c;

void
hdlchld(const int s)
{
        unsigned long   p;
        int             x;

        p = waitpid(-1, &x, WNOHANG | WCONTINUED | WUNTRACED);
        fprintf(stdout, "%lu\n", p);
        if (p + 1) {
                c++;
                fprintf(stdout, "pid: %lu\n died", p);
        }
}

int
main(int argc, char **argv)
{
        struct sigaction        s;
        unsigned long           i, p;
        int                     x;

        s.sa_handler = hdlchld;
        sigemptyset(&s.sa_mask);
        sigaddset(&s.sa_mask, SIGCHLD);
        s.sa_flags = 0;

        if (sigaction(SIGCHLD, &s, NULL) == -1) return 110;

        for (i = 0; i < 100; i++) {
                p = fork();
                if (p == -1ul) break;
                if (!p) break; /* child */
        }
        if (p == -1ul) return 1;
        if (p) while (c < i) sleep(1); /* parent */
        else sleep (1); /* child */
        return 0;
}

Reply via email to