我在阅读关于fork
函数以及它如何创建新进程。下面的程序运行正常,并打印here
十六倍,但是,我无法理解的执行流程:了解POSIX - fork()
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <limits.h>
#include <sys/types.h>
#include <unistd.h>
#include <pthread.h>
int main()
{
int i;
for (i = 0; i < 4; i++) { // line no. 12
fork(); // line no. 13
}
printf("%s\n", "here");
return 0;
}
在我看来,有两种方式这个程序可以被看作是:
第一种方法:fork()
总共被称为四次。如果我用四次调用fork()
函数替换循环,事情似乎落空了,我明白为什么here
打印2^4
次。
第二种方法:fork()
产生一个新的进程,从它被调用的地方开始,每个子进程都有自己的局部变量。所以,在行号后。 13,每个子进程都会看到循环的结尾(}
),并且它们会转到第1行。 12.因为,所有这些子进程都有自己的局部变量i
设置为0(也许i
被设置为一些垃圾值?),他们都再次分叉。再次对于这些子进程,其本地变量i
设置为0.这应该导致fork bomb。
我当然错过了我的第二种方法可能有人请帮忙吗?
谢谢。
精彩讲解,谢谢。 – babon