forkN的功能是什么?

时间:2013-08-30 18:02:22

标签: c operating-system fork semaphore multitasking

第一次使用C代码并被此命中。有人熟悉“ forkN ”吗?我读过有关fork但我找不到任何对“ N ”的引用...为了把它放到上下文中,我必须确定下面的代码中运行了多少进程。 / p>

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

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

非常感谢任何帮助!

2 个答案:

答案 0 :(得分: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个进程调用forkN(),并且这2个进程中的每一个都创建自己的子进程。

答案 1 :(得分:0)

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