linux程序建立之fork與vfork

2021-10-25 07:14:22 字數 1429 閱讀 6339

乙個現有的程序可以呼叫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函式時,啟動被呼叫的函式,後面的 則不再執行,而是直接執行呼叫的程式...