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 ...