fork(),vfork 建立程序

2021-08-19 07:40:53 字數 1076 閱讀 7359

1、兩個返回值,父程序返回它的子程序的id,子程序返回0.

(原因:fork()建立了子程序,建立好了之後就會從fork之後開始執行,此時子程序和父程序都會往下走,所以都會有return 0;就有兩個返回值)

2、建立子程序是以父程序為模板,**共享,資料採用寫時拷貝的方式各自擁有乙份。

3、父子程序執行的順序不確定,取決於作業系統的排程。

和fork()函式相比,有相似之處,但也有不同的地方

1、vfork()建立了子程序有乙個特性,子程序和父程序共享虛擬位址空間。

其中最主要的是拷貝頁表(頁表)想要子程序幫著父程序完成一些工作就會寫時拷貝資料與頁表,只有將做好了事情的狀態返回給父程序,才是正常退出,父程序就是通過頁表能夠看到子程序的返回狀態。

#include

2#include

3int g_val=100;

4int main()else

if(id>0)

19else

20 perror("vfork()");

21return

0; 22 }

由於子程序改變了全域性變數,父程序也相繼改變了,所以證明是共享一塊位址空間,而且子程序在父程序的位址空間中執行。

2、vfork()保證子程序先執行,只有子程序執行完了或者呼叫了exec(exit)之後才輪到父程序被排程執行。

思考,為什麼用了exit(1),子程序執行完了就是父程序,用return 0;能達到相同效果?

因為使用exit(1)有乙個作用,就是避免父程序的呼叫棧被影響而出錯。

程序建立,程序等待,程序終止

1 程序建立,2 程序等待,3 程序終止 程序建立被定義為通過父程序建立子程序的過程。fork函式 函式原型 pid t fork void 特點 1.fork函式呼叫一次,返回兩次兩次返回值得區別分別是子程序當中的返回值為0,父程序當中的返回值為新建子程序的id 將id返回給父程序的原因是沒有函式...

程序排程之建立程序

do fork struct pid pid alloc pid struct pid pid kmem cache alloc pid cachep,gfp kernel 分配pid結構體空間 nr alloc pidmap current nsproxy pid ns 分配pid程序號 pid ...

程序管理3 程序建立

許多作業系統都提供了產生 spawn 程序的機制,首先在新的位址空間裡建立程序,讀入可執行檔案,最後開始執行。unix採用了與眾不同的實現方式,它把上述步驟分解到兩個單獨的函式中去執行 fork 和exec 把這兩個函式組合起來使用和其他系統使用的單一函式效果相似。1 寫時拷貝 傳統的fork 會直...