程序建立之fork與vfork

2021-08-21 21:41:43 字數 1132 閱讀 7848

由圖中的對映關係我們可以發現,虛擬位址與實體地址並不是一一對應的,這樣也就會出現一種問題,乙個變數位址相同內容不同,其實是虛擬位址相同,所對應的實體地址不同的原因

那麼是誰管理著虛擬位址空間呢?pcb中有mm_strct管理虛擬位址空間

linux中絕大多數函式出錯返回值都是-1,函式出錯後將錯誤編號放入errno全域性變數中。

char*strerror(error)通過錯誤編號返回對應錯誤的描述資訊,只有錯誤時才描述有效,我們可以用printf(「%s」,strerror(errno))列印出這個錯誤資訊

errno標頭檔案strerror標頭檔案

當然我們現在也可以使用簡單的報錯資訊perror()

fork**:

1 #include2 #include3 int main()

4 11 else if(id==0)

12

15 else

16

19 return 0;

20 }

vfork**:

1 #include2 #include3 int main()

4 11 else if(id==0)

12

15 else

16

19 exit(1);

20 }

~

fork:

vfork:

1.fork()函式會轉入核心執行,父子程序交替執行,而vfork() 子程序先執行,子程序結束父程序執行

2.fork()是子程序拷貝父程序的資料段、**段,vfork()子程序與父程序共享資料段

3.fork寫時拷貝,vfork不進行拷貝動作,所以vfork效能比fork更好,但退出時一定要用exit

如果我們皮一下不用exit會造成什麼結果呢??

所以千萬要記得!!!!

linux程序建立之fork與vfork

乙個現有的程序可以呼叫fork函式建立乙個新的程序。原函式如下 name fork create a child process synopsis include include pid t fork void 返回值 子程序返回0,父程序返回子程序的id,出錯返回 1。測試 如下 include ...

程序建立函式fork與vfork

1.fork 1 函式的功能 建立乙個程序 2 函式的原型 pid t fork void 3 函式的返回值 0 出錯 0 子程序 0 父程序 其值為子程序的識別號 4 標頭檔案 include fork的奇妙之處在於它被呼叫一次,卻返回兩次,它可能有三種不同的返回值。include include...

程序的建立 fork與vfork

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