fork 和vfork 的區別

2021-06-20 02:20:41 字數 929 閱讀 3154

一、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流。

vfork和fork的區別

兩者都是建立乙個子程序 但是 1.但是 vfork 並不將父程序的位址空間完全複製到子程序中,因為子程序會立即呼叫 exec 或exit 於 是也就不會存訪該位址空間。不過在子程序呼叫 e x e c或e x i t之前,它在父程序的空間中執行。這種工作方式在某些 u n i x的頁式虛存實現中提高...

fork和vfork的區別

fork 拷貝了乙份父程序的資料,也就是說父子之間互不干涉 vfork 與父程序共享同乙份資料 程式參考 include include include int main void else if pid 0 printf pid d,var d n getpid var return 0 執行結果...

fork與vfork的區別

1.fork函式介紹 include sys types.h include unistd.h pid t fork void 正確返回 父程序中返回子程序的程序號 子程序中返回0 單調用雙返回函式 錯誤返回 1 子程序是父程序的乙個拷貝。具體說,子程序從父程序那得到了資料段和堆疊段,但不是與父程序...