vfork(建立乙個新的程序)

2021-06-09 17:52:55 字數 1373 閱讀 1062

vfork(建立乙個新的程序) 相關

函式wait,execve

標頭檔案 #include

定義函式 pid_t fork(void);

函式說明

vfork()會產生乙個新的子程序.但是vfork建立的子程序與

父程序共享

資料段,而且由vfork建立的

vfork()用法與fork()相似.但是也有區別,具體區別歸結為以下3點:

1. fork():子程序拷貝父程序的

資料

段,**段

. vfork():子程序與父程序共享資料段.

2. fork():父子程序的執行次序不確定.

vfork():保證子程序先執行,在呼叫exec或exit之前與父程序資料是共享的,在它呼叫exec

或exit之後父程序才可能被排程執行。

3. vfork()保證子程序先執行,在她呼叫exec或exit之後父程序才可能被排程執行。如果在

呼叫這兩個

函式之前子程序依賴於父程序的進一步動作,則會導致死鎖。

下面通過幾個例子加以說明:

返回值如果vfork()成功則在父程序會返回新建立的子程序**(pid),

而在新建立的子程序中則返回0。如果vfork失敗則直接返回-1,失

敗原因存於errno中。

錯誤**

eagain 程序數已達系統規定上限

enomem 

記憶體不足

,無法配置核心所需的

資料結構

空間。範例  

#include

#include

#include

int main(void)

else if(pid == 0)

else

}return 0;}執行

this is child process

this is parent process

注:如果在程式中不加exit語句,程式會一直迴圈執行下去,直到程序號被分配完才會退出

程序的建立 fork與vfork

目錄 fork函式 fork的使用 vfork函式 fork 與 vfock 都是建立乙個程序,那它們有什麼區別呢?程序的正常終止方法?程序的異常終止 為什麼vfork 子程序中可以呼叫 exit 卻不可以呼叫exit 也不可以直接return呢?標頭檔案 include 函式原型 pid t fo...

建立乙個新的Content Provider

通過擴充套件 contentprovider 類來建立乙個新的 content provider 重寫oncreate 方法來開啟或初始化你要通過這個 provider 提供的底層資料來源。新的 content provider 的框架 如下所示 import android.content.imp...

vfork函式建立出的父子程序

vfork函式建立新程序的主要目的在於用exec函式執行另外的程式。在沒呼叫exec或exit之前子程序的執行中是與父程序共享資料段的,在vfork呼叫中,子程序先執行,父程序掛起,直到子程序呼叫exec或exit,在這之後,父子程序的執行順序不在有限制。例 1 include 2 include ...