利用fork循環創建進程

我們知道,fork可以創建子進程,那麼如果循環調用fork,進程之間會有什麼關係呢?

wKiom1dqdNTTR9wqAABHyaFj9t0739.png得到結果:

wKioL1dqdO2zBFHKAAAbR7zI3-w111.png

從結果上分析,一共有4個進程,6132,6133,6134,6135,它們的關係是怎樣的呢?

wKiom1dqdRTCi2z8AAAf9X87mQs243.png

按道理來講,剛開始i=0,只有一個進程6132,fork後,產生子進程6133。6132執行完printf後,i++。在fork後,6132作爲父進程,產生子進程6134.而6133作爲i=0時的子進程,執行完printf後,i++,此時6133作爲父進程,產生子進程6135。 

結果卻和所想有些出入,爲什麼後4個進程的父進程都是1?

我認爲可能和內核進程調度算法有關,可能是因爲父進程執行完,而子進程沒有執行完,導致子進程成爲孤兒進程,被1給回收。

之後我給父進程加上sleep(1);

這樣就能夠直觀的顯示進程之間的關係了。

wKioL1dqdaXjGaHHAAATyHkI-kU764.png    


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