C语言 等待叉链中的所有子进程

kx1ctssn  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(146)

我想用一个父进程创建10个子进程,但如何使父进程等待所有子进程?
我有这个C语言的代码

for(int cnt = 1; cnt<=10; cnt++) {
        switch ( pid = fork() ) {
                case -1:
                    perror("error");
                    break;
                case 0:
                    printf("%d: child process, my PID=%d and PPID=%d\n", cnt, getpid(), getppid() );
                    sleep(10);
                    exit(0);
                break;
                default:
                    printf("%d: parent process, my PID=%d and PPID=%d\n", cnt, getpid(), getppid() );
                    sleep(10);
        }   
    }
}

我尝试在默认部分使用wait和waitpid,但似乎父进程只等待下一个子进程退出。我如何使它等待所有10个子进程退出?

c2e8gylq

c2e8gylq1#

您必须遍历子进程,如果需要,还可以获取状态。
就像这样:

int i, pid, status;
for (i=0; i<10N; i++) {
    pid=wait(&status);
    printf("Arrived child with pid %d - status %d\n", pid, status);
}

相关问题