Linux中fork 系統呼叫函式

2021-09-19 16:48:33 字數 1910 閱讀 2739

什麼是fork()呼叫fork()發生了什麼

子程序建立後,系統會給子程序分配資源,然後把原來的程序的所有值都複製到新的子程序中,只有少數值與原來的程序的值不同;其實就是父程序的乙份副本。但是子程序和父程序駐留在不同的記憶體空間上。這些記憶體空間具有相同的內容,並且乙個程序執行的任何操作都不會影響其他程序。

c語言中的fork()

fork()不需要引數,一次呼叫fork()會返回倆個返回值(在父程序與子程序中分別返回)

#include #include
使用fork()時,可用於程序id的型別pid_t,因為pid_t中定義;

標頭檔案定義fork()的地方,因此必須將它包含在程式中以使用fork();

返回型別中定義,fork()呼叫在中定義, 因此,需要在程式中包含兩者以使用fork()系統呼叫。

fork()呼叫示意圖

例項1.

1 #include 

2 #include 34

void

print()

78intmain()

輸出效果:

5.fork()呼叫過程:

用**強化fork()的呼叫過程:

1 #include 

2 #include

3 #include 45

intmain()

else

if(pid >0)

else

17printf

("輸出count的值:%d\n"

, count);18

return0;

19}

輸出效果:

練習:

我相信通過上面的例子,我們已經對fork()有了一定的認識了,那麼我們來做乙個練習吧:

1 #include 

2 #include 34

intmain()

輸出:

總共列印了8次,也就是建立了8個程序,程序總數= 2^n其中n是fork系統呼叫的數量。所以這裡n = 3, 2^3 = 8

(新的子程序和原始程序組成)

分析**:

l1		

/ \

l2 l2

/ \ / \

l3 l3 l3 l3

系統呼叫fork

fork的基本內容 fork是依次呼叫兩次返回,分別返回在父程序和子程序中 1 在父程序中,fork返回新建立子程序的程序id 2 在子程序中,fork返回0 3 如果出現錯誤,fork則返回乙個負值 例子 void fork0 else 在這段 中,fork 被執行後將建立與父程序相同的子程序,並...

Linux 核心學習 系統呼叫(fork)

昨天花了一天的時間在看linux0.11的核心,當看到main.c中的int 函式的時候被乙個系統呼叫難倒了 其實筆者的c,彙編等基礎並不是很厲害。但是處於某些原因,就入了這個核心的坑,被澆冷水是經常的事情 於是各種資料各種搜尋,但是大家給出的資料都是千篇一律,不是一開始就介紹什麼是系統呼叫,就是沒...

fork系統呼叫過程

又是查詢資料,又是看原始碼,折騰了大半天,終於把fork的過程弄完了,但是後面的跟蹤狀態還不太懂,等具體後面弄清楚了,再加上。核心是2.6.11版本的。fork 系統呼叫 我們執行乙個系統呼叫時,系統將呼叫巨集指令 syscall0 define syscall0 type,name type na...