2014-10-21 59 views
3

在下面的代码中,fork是否实际上并行或一个接一个地运行?C - 当并行执行fork()时等待(NULL)的含义

wait(NULL)是什么意思?

(该程序创建子进程的n数,n经由命令行供给)

int main (int argc, char *argv[]) { 
    int i, pid; 

    for(i = 0; i < atoi(argv[1]); i++) { 
     pid = fork(); 
     if(pid < 0) { 
      printf("Error occured"); 
      exit(1); 
     } else if (pid == 0) { 
      printf("Child (%d): %d\n", i + 1, getpid()); 
      exit(0); 
     } else { 
      wait(NULL); 
     } 
    } 
} 
+2

“man wait”的哪个部分你不明白? – 2014-10-21 22:17:39

+2

或者,根据你的手册页,'man 2 wait' :) – 2014-10-21 22:18:11

+0

我只是想知道,如果在上面的代码中 - 它会等待孩子完成之前创建一个新的孩子? – YemSalat 2014-10-21 22:19:25

回答

4

他们并行运行,直到它们中的一个的等待时间为点。

wait(NULL)或更准确地说wait(0)表示等待,直到子进程中的状态改变。要了解Unix/Linux C API调用,请在命令行中输入man <function Name>。你需要习惯阅读这些页面,现在就开始吧。

在你的情况

man wait 

会给你你需要的东西。

由于您只有fork(...)编辑一次,您只有一个孩子。父母等待,直到它改变状态,并且由于孩子在分岔过程中的状态与父母在分岔之前的状态相同(运行),可能的结果是父母一直等到孩子死亡。然后,父母将继续执行,但由于在拨打wait(...)后没有太多事情要做,它也会很快退出。

+0

感谢您的解释。 (你在第三个代码块有一个错字:main - > man) – YemSalat 2014-10-21 22:34:01

+0

@YemSalat谢谢,现在修复它 – 2014-10-21 22:34:50