Linux 父子程序與fork

2021-07-07 01:39:17 字數 747 閱讀 9710

每個程序都有乙個非負整數表示的唯一程序id,如交換程序(即排程程序)id為0,init程序id為1,頁守護程序id為2;

原型如下:

fork函式被呼叫一次,但返回兩次,兩次返回的區別就是子程序返回的是0,父程序返回的新子程序的id;

子程序是父程序的副本,獲得了父程序資料空間、堆和棧的副本;父子程序並不共享這些儲存空間,共享正文段(即**段);因此子程序對變數的所做的改變並不會影響父程序。

目前採用了寫時複製(copy-on-write,cow)技術(即fork之後,子程序不會立馬執行exec)負責管理父子程序的儲存空間關係。資料段、堆疊這些區域是父程序和子程序共享的,只有程序空間的各段的內容要發生變化時,才會將父程序的內容複製乙份給子程序。

示例如下:

#include#includeint globvar=6;

int main()

else sleep(2); //parent

var=1;

printf("pid=%ld,glob=%d,var=%d\n",(long)getpid(),globvar,var);

return 0;

}

執行結果如下:

5 8fork父子程序

理解fork建立子程序的本質 1 開啟乙個有內容的檔案 2 呼叫fork建立子程序 3 讀檔案的第乙個字元輸出列印出來 4 看看父程序和子程序分別讀到的字元是什麼 2 按如下要求編寫程式 1 呼叫fork建立子程序 2 開啟乙個有內容的檔案 3 讀檔案的第乙個字元輸出列印出來 4 看看父程序和子程序...

fork父子程序執行順序

使用一段 來檢查父子程序執行順序 str hello world php eol 派生乙個子程序,子程序會複製主程序中的上下文 pcntl fork 函式在主程序中返回子程序的程序id,在子程序返回0,失敗在主程序返回 1 pid pcntl fork 這裡開始的 會被主程序 子程序共同執行 如果不...

Linux 基於fork 函式父子程序之間的通訊

寫乙個程式,包含兩個程序,在子程序輸入參與計算的資料a b的值,在父程序中計算a b的值並輸出計算結果 要求輸出子程序和父程序的程序id.源程式 include include include include include include intmain void pid fork if pid ...