Я создаю несколько дочерних процессов, которые посылают сигнал родительскому процессу и умирают. Я просто считаю их. Но я никогда не получаю правильный счет. Некоторые сигналы никогда не улавливаются обработчиком.
Как мне это написать?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int ended = 0;
void handler(int sig){
ended++;
}
int main(int argc, char **argv){
int i;
pid_t pid, ppid;
if (signal(SIGUSR1, handler) < 0) {
fprintf(stderr, "signal failed.\n");
exit (-1);
}
ppid = getpid();
for (i = 0; i < 50; i++){
if ((pid = fork()) < 0){
fprintf(stderr, "fork failed.\n");
exit(-1);
}
if (pid == 0){
kill(ppid, SIGUSR1);
exit(0);
}
}
while (wait(NULL) > 0);
printf("ended = %d\n", ended);
return 0;
}
Выходные данные для этой программы иногда 47, другие 39 ... но никогда 50