Обработчик сигнала срабатывает только 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++;
}