fork建立程序
函式原型如下
#include// 必須引入標頭檔案,使用
fork
函式的時候,必須包含這個標頭檔案,否則,系統找不到
fork
函式pid_t fork(void); //void代表沒有任何形式引數
父程序與子程序
1.掌握概念,什麼是父程序,什麼是子程序
除了0號程序(系統建立的)之外,
linux
系統中都是由其他程序建立的。建立新程序的程序,即呼叫
fork
函式的程序為父程序,新建的程序為子程序。
2.fork函式不需要任何引數,對於返回值有三種情況
1)對於父程序,
fork
函式返回新建子程序的
pid;
2)對於子程序,
fork
函式返回 0;
3)如果出錯,
fork
函式返回 -1。
建立程序案例(fork.c)
#include
#include
#include
int main(void)
if(pid == 0)
if(pid > 0)
return 0;
}在shell中編譯該程式如下:
gcc fork.c -o fork
在shell中執行該程式如下:
./fork
最後輸出結果:
再次執行結果如下:
父子程序共享資源
1.父子程序共享**段(可讀的)
父程序在建立子程序的時候,子程序會把父程序的位址空間裡的資料段。和棧堆進行複製,但是沒有複製**段。
2.詳細可看具體**示例(
fork_1.c
)fork_1.c
#include
#include
#include
int global; // 全域性變數在資料段中
int main()
if( pid == 0 )
sleep(2) ;
printf("the parent, data : %d, stack : %d, heap : %d\n", global , stack , *heap);
return 0 ;
}執行結果如下:
fork函式出錯的情況
1.fork函式返回值為
-1即建立失敗,有兩種情況可能會導致
fork
函式出錯;
2.系統中已經有太多的程序存在;
3.呼叫
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 之後有兩個程序,乙個父程序,乙個子程序,父...