乙個現有的程序可以呼叫fork函式建立乙個新的程序。
原函式如下:
name
fork - create a child process
synopsis
#include
#include
pid_t fork
(void
);
返回值:子程序返回0,父程序返回子程序的id,出錯返回-1。
測試**如下:
#include
#include
#include
intmain()
else
if(pid==0)
//子程序
return0;
}
多程序模擬伺服器**:
#include
#include
#include
intmain()
else
if(pid==0)
}}}return0;
}
vfork()會產生乙個新的子程序.但是vfork建立的子程序與父程序共享資料段,而且由vfork()建立的子程序將先於父程序執行。
原函式如下:
name
vfork - create a child process and block parent
synopsis
#include
#include
pid_t vfork
(void
);
返回值:子程序返回0,父程序返回子程序的id,出錯返回-1。
測試**:
#include
#include
#include
#include
intmain()
else
if(pid==0)
//子程序
return0;
}
總結:
fork():子程序拷貝父程序的資料段,**段. vfork():子程序與父程序共享資料段.
fork():父子程序的執行次序不確定.
vfork():保證子程序先執行,在呼叫exec或_exit之前與父程序資料是共享的,在它呼叫exec
或_exit之後父程序才可能被排程執行。
vfork()保證子程序先執行,在她呼叫exec或_exit之後父程序才可能被排程執行。如果在
呼叫這兩個函式之前子程序依賴於父程序的進一步動作,則會導致死鎖。
當需要改變共享資料段中變數的值,則拷貝父程序。
程序建立之fork與vfork
由圖中的對映關係我們可以發現,虛擬位址與實體地址並不是一一對應的,這樣也就會出現一種問題,乙個變數位址相同內容不同,其實是虛擬位址相同,所對應的實體地址不同的原因 那麼是誰管理著虛擬位址空間呢?pcb中有mm strct管理虛擬位址空間 linux中絕大多數函式出錯返回值都是 1,函式出錯後將錯誤編...
Linux 程序建立 fork
1 fork 函式原型 pid t fork void 函式返回值型別為 pid t,實質是 int 型別,linux 核心2.4.0版本的定義是 typedef int kernel pid t typedef kernel pid t pid t 2 fork 函式的底層實現 fork vfor...
fork程序建立
fork建立子程序,fork函式返回兩個值,當為0時,則認為是子程序 塊執行區域,而不為0則是父程序 塊執行區域。我們需要知道的是,fork子程序可以與父程序共享部分程序上下文,而與此不同的是execl函式,一旦開始執行到execl函式時,啟動被呼叫的函式,後面的 則不再執行,而是直接執行呼叫的程式...