fork和vfork的用法

2021-10-08 22:18:17 字數 920 閱讀 9206

簡介

fork和vfork都可以建立乙個新程序。

fork

pid _t fork(void)

fork函式呼叫成功返回兩次

返回值為0,代表當前是子程序

返回值為非負數,代表當前為父程序,⽗程序的返回 值則是新⼦程序的程序 id。呼叫失敗返回-1。

#include #include #include int main()

else if(pid == 0)

else if(pid == -1)

return 0;

}

vfork

pid_t vfork(void);

vfork函式呼叫成功返回兩次

返回值為0,代表當前是子程序

返回值為非負數,代表當前為父程序,⽗程序的返回值是新⼦程序的程序id。

呼叫失敗返回-1。

vfork與fork類似,也可以建立乙個新的程序,但有以下幾個區別。

1:vfork直接使用父程序的儲存空間,不拷貝父程序的儲存空間。

2:vfork保證讓子程序先執行,當呼叫exit退出後才開始執行父程序。注意使用exit或者exec退出,不然會有意外的問題。

例:

#include #include #include #include int main()

}if(pid == 0)}}

return 0;

}

總結:

呼叫fork生成的子程序會複製父程序的資料,兩者誰先執行由系統排程來定。

呼叫vfork生成的子程序會共享父程序的記憶體空間,子程序優先執行。

vfork和fork的區別

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

fork 和vfork 的區別

一 fork 1.呼叫方法 include include pid t fork void 正確返回 在父程序中返回子程序的程序號,在子程序中返回0 錯誤返回 1 子程序是父程序的乙個拷貝。即,子程序從父程序得到了資料段和堆疊段的拷貝,這些需要分配新的記憶體 而對於唯讀的 段,通常使用共享記憶體的方...

fork和vfork的區別

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