Linux學習之 vfork函式

2022-08-28 18:09:06 字數 924 閱讀 1630

為什麼使用vfork()?

希望父子程序執行不同的**。例如:

網路服務程式中,父程序等待客戶端的服務請求,當請求達到時,父程序呼叫fork,使子程序處理該次請求,而父程序繼續等待下乙個服務請求到達。

vfork與fork的函式原型相同,用於建立新程序,而該新程序的目的是exec乙個新程式(執行乙個可執行的檔案)。

由於新程式將有自己的位址空間,因此vfork函式並不將父程序的位址空間完全複製到子程序中。

注意以下兩點:

1.子程序在呼叫exec或exit之前在父程序的位址空間中執行

2.vfork函式保證子程序先執行,在它呼叫exec或者exit之後,父程序才可能被排程執行

view code

#include

#include

#include

#include

using

namespace std;

int glob = 6;

int main(void)

else

if (pid == 0)

printf("

in parents\n

");printf("

pid = %d, glob = %d, var = %d\n

", getpid(), glob, var);

return

0;}

因為在_exit(

0);之前子程序執行在父程序的位址空間中,所以對glob和var的++操作都最終在父程序中輸出了。

至於最後為什麼使用_exit而不是exit,見"linux學習之"exit函式""

程序控制之vfork函式

vfork函式的呼叫序列和返回值與fork相同,但兩者的語義不同。vfork用於建立乙個新程序,而新程序的目的是exec乙個新程式。vfork和fork一樣都建立乙個子程序,但是它並不將父程序的位址空間完全複製到子程序中,因為子程序會立即呼叫exec 或exit 於是也就不會存訪該位址空間。相反,在...

Linux之fork與vfork區別

建立乙個新程序的方法只有由某個已存在的程序呼叫fork 或vfork 1.fork 函式 返回值 成功 父程序 返回子程序的pid 子程序 返回0 失敗 父程序返回 1 子程序是父程序的乙個拷貝。即子程序從父程序得到資料段和堆 棧段的拷貝,這些需要分配新的記憶體 不是與父程序共享,而是單獨分配記憶體...

理解vfork函式

vfork這個函式,起初是在fork函式沒有實現寫實拷貝機制的時候出現的乙個東西。然而現在的fork的函式早已經支援寫實拷貝。提到寫實拷貝就多說幾句,在作業系統中,建立乙個子程序你就得給他分配程序所需的資源,如果每次建立子程序後都要拷貝父程序的資源有點太降低效率了。就是在這個環境下衍生出了vfork...