我在閱讀關於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