Как убедиться, что сигнал был получен, прежде чем продолжить - PullRequest
0 голосов
/ 20 июня 2019

У меня есть процесс нескольких детей, мне нужно отправить сигнал родителю и убедиться, что сигнал был получен, прежде чем продолжить

#define CHILD 0
int n = 0;

void handler(int sig)  {
    n--;
    signal(SIGCHLD, handler);
}

int main(int argc, char * argv[]) {
    int p ;
    signal(SIGCHLD, handler);

    if(argc == 2) {
        int k = atoi(argv[1]);
        n = k;
        while(k-- != 0) {
            p = fork();
            if(p == CHILD) {
                srand(time(NULL)); 
                int r = 1 +(rand()%10);
                printf("No:%d %d Child PID: %d times.%d\n",k,n, getpid(),r);

//                int rai = raise(SIGCHLD);
                printf("rai: %d  %d\n", rai, n);
                sleep(r);

                exit(1);
            }
        }
    } else {
        puts("Please provide k num of zombie to be generated\n");
    }

    while(p > CHILD && n > 0) {
        printf("sleeping 2  %d\n", n);
        sleep(2);
    }

    return EXIT_SUCCESS;
}

Как я могу быть уверен, что родитель перехватит все сигналы SIGCHILDИмпорт был пропущен специально

...