1

第一次使用 C 代码并被此击中。有人熟悉“ forkN ”吗?我已经阅读了关于 fork 的信息,但找不到对“ N ”的任何引用......为了将其置于上下文中,我必须确定下面的代码中正在运行多少进程。

int main(int argc, char* argv[]) {
  forkN(6);
}

void forkN(int count) {
  if(count > 0) {
    fork();
    forkN(count-1);
  }
}

任何帮助将不胜感激!

4

2 回答 2

4

关于 fork 你必须记住的是它返回两次,所以3我将向你展示分析。

 int main(int argc, char* argv[]){
    forkN(6)
 }

 void forkN ( int count ) {
    if(count > 0) {
            fork();
            //returns twice, once for the parent process, once for the child. 
            forkN(count-1);
            //Both processes call forkN
    } 
 }

--main process -- forkN(3) -- if(3 > 0)-- fork() --- forkN(2) -- if(2>0) -- fork().. forkN(1)... 
                                            |Child                            |
                                            -------- forkN(2) -- if(2>0) -----|-fork()..
                                                                              |   |
                                                                              |   -------forkN(1)..
                                                                              |----- forkN(1)..
enter code here

如您所见,它变得复杂。要知道的是,每次fork()调用时,都会有 2 个进程调用 into forkN(),并且这 2 个进程中的每一个都会创建自己的子进程。

于 2013-08-30T18:20:49.197 回答
0

forkN()函数是在您的示例源代码中定义的,非常明显,“N”是否可能让您感到困惑?答案是“forkN”只是一个本地定义函数的名称,可以很容易地命名为“repeatedly_do()”或“countdown_lots_of_times()”。至于识别有多少进程正在运行,如您所见,名为“forkN()”(或“repeatedly_do()”或“countdown_lots_of_times()”)的函数是fork()递归调用的。绘制流程创建并计算它们应该相当简单(或者您可以只取幂。)

于 2013-08-30T18:21:30.157 回答