Обработчик сигнала срабатывает только 1 раз

step увеличивается только 1 раз, все вызовы kill() начиная со второго (в данном случае kill(ppid, SIGUSR1)) не дают результата.

void goodHandler(int signum);

pid_t pid0, pid1, pid2, ppid;
char str[20];
int len;
volatile int step;

int main(int argc, char *argv[]) {  
    step = -1;
    signal(SIGUSR1, goodHandler);

    scanf("%s", str);
    ppid = getpid();

    if (pid0 = fork()) {
        if (pid1 = fork()) {
            if (pid2 = fork()) {
                kill(pid0, SIGUSR1);
                sleep(4);

                if (step == 1) {
                    printf("I am parent, pid = %d, got value %d from child, pid = %d\n", getpid(), SIGUSR1, pid0);
                    kill(pid1, SIGUSR1);
                }

                sleep(10);

                wait(NULL);
            }
    } else {
        sleep(2);
        if (step==0) {
            printf("I am child, pid = %d, got value %d from parent, pid = %d\n", getpid(), SIGUSR1, ppid);
            len = strlen(str);
            kill(ppid, SIGUSR1);
        }
      }
    }

    return 0;
}

void goodHandler(int signum) {
        step++; 
}

Ответы (1 шт):

Автор решения: justBoringUsername

Для себя решил проблему с помощью mmap()

→ Ссылка