快速理解 Linux 中 的 fork 函式

2021-09-17 04:20:23 字數 1608 閱讀 6457

1、fork的作用:

乙個程序呼叫fork( )函式時,會產生乙個新程序(即子程序),而自己本身也還存在,作為父程序

子程序相當於父程序的複製,擁有與父程序相同的資料結構(即 資料+資料空間),但資料結構並不是共享的,

只有**段是共享的。

ps:共享的意思指用同乙個資料結構,子程序、父程序改變該資料結構都會對他產生影響。具體可見下分析部分

fork( ) 之後生成的父、子程序會分別執行fork語句之後的**,因此需要通過fork的返回值區分自己是父程序還是子程序

fork( ) 返回值是乙個整型數 fpid,有3種情況

(1)父程序:fpid = 子程序的pid ( fpid > 0)

(2)子程序:fpid = 0

(3)建立失敗:fpid < 0

2、例項分析

#include #include int main ()  

else

printf("統計結果是: %d/n",count);

return 0;

}

執行結果:i am the child process, my process id is 5574

子程序統計結果是: 1

i am the parent process, my process id is 5573

父程序統計結果是: 1

(1) fork出來的父子程序是併發的,執行的先後順序是根據當前作業系統的排程演算法決定的,並不一定。

即可能 父程序先執行, 也可能 子程序先執行。

(2)getpid( )可以獲取當前程序的 程序號pid(process id)

getppid( )可以獲取當前程序的父程序的 程序號pid(parent process id)     

(3)count 在 fork( ) 前被初始化為 0

因為資料相同但不共享,因此父子程序的 count 分別 ++ ,結果都為 1 。

(4) 如果在父程序的**中加入   

printf("my fpid is %d/n",fpid);
則結果為:

my fpid is 5574

因為父程序的 fpid 等於 新建的子程序的 pid    

初識linux 中的fork

fork函式將執行著的程式分成2個 幾乎 完全一樣的程序,每個程序都啟動乙個從 的同一位置開始執行的執行緒。這兩個程序中的執行緒繼續執行,就像是兩個使用者同時啟動了該應用程式的兩個副本。1 在父程序中,fork返回新建立子程序的程序id 2 在子程序中,fork返回0 3 如果出現錯誤,fork返回...

fork 的使用理解

查詢fork 函式有以下幾種返回值 1.在父程序中,fork返回新建立子程序的程序id 2.在子程序中,fork返回0 3.如果出現錯誤,fork返回乙個負值。總是不理解進行試驗驗證 include include include include includeint main int argc,i...

結合Unix中的緩衝理解fork

今天看到乙個有趣的程式 include include main 如果printf中沒有換行,那麼輸出是 fork i am the child process,my process id is 4286 fork i am the parent process,my process id is 4...