天天看點

Linux下程序建立Fork()函數分析

一個程序包括代碼、資料、程序控制塊、堆棧等資源。程序在運作時還有自身的狀态,這個自身的狀态不是指宏觀上的就緒态、等待态,而是指程序在CPU上運作時,CPU内部各個寄存器的值,程序在切換的時候,這些狀态值是要儲存在堆棧當中的,目的是下次程序運作時能夠“無縫”連接配接。

Linux下,用于建立程序的函數是fork()函數。fork()函數建立的“子程序是父程序的一個完整拷貝”,也就是說子程序和父程序基本一樣,不但拷貝了父程序的資料,也拷貝了父程序的代碼,還有一個關鍵的地方是拷貝了父程序的運作狀态,也就是說父程序運作到了什麼地方,子程序運作是也是從對應的代碼位置開始運作的。是以子程序是從自身被建立的代碼處開始執行的。

下面我們舉個例子,看看下面代碼中建立了多少個子程序。

Linux下程式建立Fork()函數分析

那麼圖中的代碼共建立了多少個程序呢?這裡大家需要注意的是“&&”操作,該操作的左邊操作數如果為0,那麼後面的語句就不執行了,與操作麼,左邊為0,右邊就不用算了,結果肯定為0!是以如果父程序在執行“fork()&&fork()”語句中的第一個fork時,會生成一個子程序,但是由于該子程序給自身的傳回值是0,是以該子程序在執行時,不會執行“fork()&&fork()”語句中後面的fork。具體的流程請看下面手畫的圖。

Linux下程式建立Fork()函數分析

老羊快跑 微信公衆号,歡迎關注。我們有最好的作業系統課程微論壇

繼續閱讀