私のプログラムでは、有限の while ループで子プロセスを (並行して) fork し、それぞれに対して exec を実行しています。すべての子が終了した後にのみ、親プロセスが実行を再開するようにします (この while loop の後のポイント)。どうすればいいですか?
私はいくつかのアプローチを試しました。1 つのアプローチでは、while ループの後に親を一時停止し、waitpid がエラー ECHILD (残りの子がありません) を返したときにのみ SIGCHLD ハンドラーから条件を送信しましたが、このアプローチで直面している問題は、親がすべてのプロセスのフォークを完了する前であっても、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