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(...)
调用之后没有太多事情要做,它也会快速退出。