此題爲刷題過程中遇到了題目,比較繞,就下下來記錄一下。
int main(void)
{
fork();//位置1
fork();//位置2
fork();//位置3
}
如上述代碼所示。
我們順着程序來捋一遍。。。。。
首先程序執行,創建一個父進程,作爲第一個進程該進程的代碼如下:
1進程
int main(void)
{
fork();//位置1
fork();//位置2
fork();//位置3
}
然後程序執行到第一行,創建第一個子進程,該子進程由位置2開始執行。所以該進程的代碼如下(姑且叫做進程2)
進程2
int main(void)
{
fork();//位置2
fork();//位置3
}
然後2進程的第一個fork又創建了2進程的一個子進程,由位置3開始執行,3進程的代碼如下:
進程3
int main(void)
{
fork();//位置3
}/。
此時3進程的fork創建了第4進程,此進程從位置3開始執行,於是函數裏沒有任何東西,到那時任然是一個進程,這裏成爲4進程。然後我們回到2進程,此時從位置3開始執行。創建了5進程,這個進程任然是個空的進程。於是再看1進程,在1進程中從位置2開始執行,位置2的fork函數創建了6進程,該進程從位置3開始執行,代碼如下:
6進程
int main(void)
{
fork();//位置3
}
此時6進程的fork函數創建了7進程,這個進程任然是一個空進程(從位置4開始執行)。於是再回到1進程,從位置3執行代碼,執行位置3的fork函數,創建了8進程這同樣是一個空進程,於是,再回到1進程,此時代碼執行完畢,父進程結束。
至此一共產生了8個進程。
有點小囉嗦。。。。