在下面的代码中, fork 实际上是并行运行还是一个接一个运行?
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 <function Name>
在命令行上。您需要习惯阅读这些页面,所以最好现在就开始。
在你的情况下
man wait
会给你你所需要的。
因为你只有 fork(...)
ed一次,你只有一个 child 。父级等待直到它改变状态,并且由于子级在 fork 期间的状态与父级在 fork 之前的状态(运行)相同,因此可能的结果是父级等待直到 child 死了。然后父级将继续执行,但是因为它在 wait(...)
之后没有太多事情要做。调用,它也会很快退出。
关于C - 并行执行 fork() 时 wait(NULL) 的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26497315/