Haga que los padres esperen a que finalicen todos los procesos secundarios

Espero que alguien pueda arrojar algo de luz sobre cómo hacer que el padre espere que TODOS los procesos secundarios terminen antes de continuar después del tenedor. Tengo un código de limpieza que quiero ejecutar, pero los procesos secundarios deben haber sido devueltos antes de que esto pueda suceder.

for (int id=0; id<n; id++) { if (fork()==0) { // Child exit(0); } else { // Parent ... } ... } 

 pid_t child_pid, wpid; int status = 0; //Father code (before child processes start) for (int id=0; id 0); // this way, the father waits for all the child processes //Father code (After all child processes end) 

POSIX define una función: wait(NULL); Es la abreviatura de waitpid(-1, NULL, 0); , lo que suspenderá la ejecución del proceso de llamada hasta que salga cualquier proceso hijo. Aquí, el primer argumento de waitpid indica esperar a que finalice cualquier proceso hijo.

En su caso, haga que el padre lo llame desde su sucursal.

Use waitpid () de esta manera:

 pid_t childPid; // the child process that the execution will soon run inside of. childPid = fork(); if(childPid == 0) // fork succeeded { // Do something exit(0); } else if(childPid < 0) // fork failed { // log the error } else // Main (parent) process after fork succeeds { int returnStatus; waitpid(childPid, &returnStatus, 0); // Parent process waits here for child to terminate. if (returnStatus == 0) // Verify child process terminated without error. { printf("The child process terminated normally."); } if (returnStatus == 1) { printf("The child process terminated with an error!."); } }