4

所以我正在开发一个可以多次执行某项任务的程序。我曾经使用线程编写过程序,但现在我需要使用带有 fork() 的进程来完成它。

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

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

简而言之,我的问题是:如何使用 fork 创建确切数量的子进程(假设我需要 5 个子进程),并让我的父进程等到这 5 个子进程执行完毕后再继续执行?

谢谢您的帮助!

4

2 回答 2

8

我认为这会起作用:

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);
于 2013-03-10T22:19:15.853 回答
1

您可以构建您的流程,以便每个流程分叉相关数量的子节点(例如,父节点将分叉 n 次,子节点 n-1,他们的子节点 n-2 等),或者您可以限制分叉只有父级保持循环(这将是最简单的情况)。所以让孩子们退出循环。

于 2013-03-10T22:50:06.380 回答