В моей программе я разворачиваю (параллельно) дочерние процессы в конечном цикле while и выполняю exec для каждого из них. Я хочу, чтобы родительский процесс возобновил выполнение (точка после этого цикла while) только после того, как все дети закончили. Как мне это сделать?
Я попробовал несколько подходов. В одном из подходов я сделал родительскую паузу после цикла while и отправил какое-то условие из обработчика SIGCHLD только тогда, когда waitpid вернул ошибку ECHILD (ни одного оставшегося ребенка), но проблема, с которой я сталкиваюсь в этом подходе, еще до того, как родитель закончил разворачивать все процессы, retStat становится -1
void sigchld_handler(int signo) {
pid_t pid;
while((pid= waitpid(-1,NULL,WNOHANG)) > 0);
if(errno == ECHILD) {
retStat = -1;
}
}
**//parent process code**
retStat = 1;
while(some condition) {
do fork(and exec);
}
while(retStat > 0)
pause();
//This is the point where I want execution to resumed only when all children have finished