三個fork函數一共能創建多少個進程?

此題爲刷題過程中遇到了題目,比較繞,就下下來記錄一下。

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個進程。

有點小囉嗦。。。。在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章