簡介
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 執行結果...