C – 并行执行fork()时等待(NULL)的含义

在下面的代码中,forks实际上是并行运行还是一个接一个地运行?

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); } } } 

它们确实并行运行,直到其中一个等待。

wait(NULL)或更准确wait(0)意味着等到子进程状态发生变化。 要了解有关Unix / Linux C api调用的信息,请在命令行中键入man 。 你需要习惯阅读这些页面,所以现在就开始吧。

在你的情况下

 man wait 

会给你你需要的东西。

因为你只有一次fork(...) ed,所以你只有一个孩子。 父进程等待直到它改变状态,并且因为fork期间子进程的状态与fork之前的父进程状态( 运行 )相同,可能的结果是父进程等待直到子进程死亡。 然后父进程将继续执行,但由于在wait(...)调用之后没有太多事情要做,它也会快速退出。