Yem*_*lat 5 c fork multiprocessing
在下面的代码中,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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
它们并行运行,直到其中一个等待.
wait(NULL)或更准确地说,wait(0)等到子进程状态发生变化.要了解有关Unix/Linux C api调用的信息,请man <function Name>在命令行中键入.你需要习惯阅读这些页面,所以现在就开始吧.
在你的情况下
man wait
Run Code Online (Sandbox Code Playgroud)
会给你你需要的东西.
由于你只fork(...)编过一次,所以你只有一个孩子.父进程等待直到它改变状态,并且因为fork期间子进程的状态与fork之前的父进程状态(运行)相同,可能的结果是父进程等待直到子进程死亡.然后父母将继续执行,但由于在wait(...)通话后没有太多事情要做,它也会很快退出.