Linux下程序建立Fork 函式分析

2021-08-10 04:39:23 字數 716 閱讀 6070

乙個程序包括**、資料、程序控制塊、堆疊等資源。程序在執行時還有自身的狀態,這個自身的狀態不是指巨集觀上的就緒態、等待態,而是指程序在cpu上執行時,cpu內部各個暫存器的值,程序在切換的時候,這些狀態值是要儲存在堆疊當中的,目的是下次程序執行時能夠「無縫」連線。

linux下,用於建立程序的函式是fork()函式。fork()函式建立的「子程序是父程序的乙個完整拷貝」,也就是說子程序和父程序基本一樣,不但拷貝了父程序的資料,也拷貝了父程序的**,還有乙個關鍵的地方是拷貝了父程序的執行狀態,也就是說父程序執行到了什麼地方,子程序執行是也是從對應的**位置開始執行的。因此子程序是從自身被建立的**處開始執行的。

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

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

Linux 程序建立 fork

1 fork 函式原型 pid t fork void 函式返回值型別為 pid t,實質是 int 型別,linux 核心2.4.0版本的定義是 typedef int kernel pid t typedef kernel pid t pid t 2 fork 函式的底層實現 fork vfor...

fork程序建立

fork建立子程序,fork函式返回兩個值,當為0時,則認為是子程序 塊執行區域,而不為0則是父程序 塊執行區域。我們需要知道的是,fork子程序可以與父程序共享部分程序上下文,而與此不同的是execl函式,一旦開始執行到execl函式時,啟動被呼叫的函式,後面的 則不再執行,而是直接執行呼叫的程式...

fork建立程序

1.程序的建立 fork 函式是建立子程序的函式,在主函式中呼叫fork會產生乙個子程序 列印出來的結果是 if語句是條件語句但卻兩個都列印了,兩個條件都滿足,也就是說兩個都執行,但卻不是一條執行流,那麼可以得出肯定還有乙個程序在列印另乙個。都記得fork 之後有兩個程序,乙個父程序,乙個子程序,父...