一、fork
1. 呼叫方法
#include
#include
pid_t fork(void);
正確返回:在父程序中返回子程序的程序號,在子程序中返回0
錯誤返回:-1
子程序是父程序的乙個拷貝。即,子程序從父程序得到了資料段和堆疊段的拷貝,這些需要分配新的記憶體;而對於唯讀的**段,通常使用共享記憶體的方式訪問。fork返回後,子程序和父程序都從呼叫fork函式返回處開始執行。
父程序與子程序的不同之處在於:fork的返回值不同——父程序中的返回值為子程序的程序號,而子程序為0
2. fork函式呼叫的用途
⑴ 乙個程序希望複製自身,從而父子程序能同時執行不同段的**。
⑵ 程序想執行另外乙個程式
二、vfork
1. 呼叫方法
與fork函式完全相同
#include
#include
pid_t fork(void);
正確返回:在父程序中返回子程序的程序號,在子程序中返回0
錯誤返回:-1
2. vfork函式呼叫的用途
用vfork建立的程序主要目的是用exec函式執行另外的程式,與fork的第二個用途相同
三、fork與vfork的區別
1. fork要拷貝父程序的資料段;而vfork則不需要完全拷貝父程序的資料段,在子程序沒有呼叫exec和exit之前,子程序與父程序共享資料段
2. fork不對父子程序的執行次序進行任何限制;而在vfork呼叫中,子程序先執行,父程序掛起,直到子程序呼叫了exec或exit之後,父子程序的執行次序才不再有限制
四、結束子程序
結束子程序不用exit(0),而使用_exit(0)。這是因為_exit(0)在結束程序時,不對標準i/o流進行任何操作。而exit(0)則會關閉程序的所有標準i/o流。
linux fork 函式學習
分類 專業學習 include include include int main case 0 default printf n d n n return 0 輸出結果1 fork child i am child parent i am parent parent getpid 4496 pare...
linux fork函式學習
在編寫socket ftp之前,我對fork函式進行了學習。先看這段範例 include include main 這段 寫了乙個使用fork函式建立子程序,父子程序同時執行而產生交錯的,不一樣的執行結果。執行結果如下 a.out i am the child process,my process ...
linux fork函式的精闢解說
開始演示 plain view plaincopyprint?root test code cat fork.c include include include main root test code gcc fork.c o fork root test code fork i am the ch...