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...