如何fork()确切数量的孩子

时间:2013-03-10 22:11:28

标签: c fork children

所以我正在研究一个可以多次执行某项任务的程序。我已经使用线程编写过程序,但现在我需要使用fork()进程。

使用线程,我只需创建指定数量的线程,让它们执行一个函数(更改共享内存中的变量),然后最终执行在共享内存中使用最终值的内容。

现在我想做同样的事情,但是我不知道怎么做,因为每当我调用fork()时它本身就会翻倍。很明显,如果我在forloop中调用fork(),那么每个父进程和子进程将通过自己的循环调用fork()。

所以我的问题简而言之: 我怎样才能使用fork创建一个确切数量的子进程(假设我需要5个子进程),让我的父进程等到这5个进程完成后再继续运行?

感谢您的帮助!

2 个答案:

答案 0 :(得分:6)

我认为这会奏效:

int processes = 5;
int i;
for (i = 0; i < processes; ++i) {
    if (fork() == 0) {
        // do the job specific to the child process
        ...
        // don't forget to exit from the child
        exit(0);
    }
}
// wait all child processes
int status;
for (i = 0; i < processes; ++i)
    wait(&status);

答案 1 :(得分:1)

要么你可以构建你的进程,以便每个人分叉相关数量的孩子(例如,父母将分叉n次,孩子n-1,他们的孩子n-2等),或者你会限制叉子,只有父母继续循环(这将是最简单的情况)。所以让孩子们退出循环。