【发布时间】:2015-05-02 10:10:37
【问题描述】:
我需要编写一个调用 fork() 给定次数的 C 程序。每个子进程都需要执行相同的任务(添加一些随机数直到达到给定的总和)。父进程一直等待,直到所有子进程都退出。我编写了以下代码,但我的输出显示另一个孩子在第一个完成之前不会开始执行它的代码。
for (i = 0; i < num_forks; i++) {
child_pid = fork();
if (child_pid < 0) {
perror("fork\n");
} else if (child_pid == 0) {
childProcess(i, goal);
} else {
parentProcess();
}
}
编辑: 目标是让所有子进程同时运行。父进程等待任何子进程退出。一旦任何一个子进程退出,父进程就会打印退出的子进程的 pid。其余子进程继续模拟运行,直到另一个子进程退出,依此类推。如果我在循环之外调用 parentProcess(),则父进程只会在最后一个子进程退出时打印退出的子 pid。
【问题讨论】: