fork,vfork,fork和vfork區別詳解

2021-09-25 23:09:12 字數 1101 閱讀 1947

一、fork

pid_t fork(void);
功能:建立乙個新程序。

返回值:一次呼叫兩次返回,子程序返回0,父程序返回子程序id,出錯返回-1。

1、兩次返回分別是程序id和0,父程序會拿到子程序的id,子程序返回0,藉此可以分別出父子程序,編寫不同的處理分支。

2、通過fork建立的子程序就是父程序的副本(拷貝),子程序會獲取父程序資料段、bss段、堆、棧、io流(共享檔案指標和檔案描述符)、緩衝區的拷貝,與父程序共享**段。

3、子程序會繼承父程序的訊號處理方式。

4、fork函式呼叫後,父子程序各自執行,誰先返回不一定。

注意:pid_t 是乙個巨集定義,其實質是int 被定義在#include中

返回兩次的原因:由於在複製時複製了父程序的堆疊段,所以兩個程序都停留在fork函式中,等待返回。因此fork函式會返回兩次,一次是在父程序中返回,另一次是在子程序中返回,這兩次的返回值是不一樣的

子程序id返回給父程序的原因:乙個程序的子程序可以有多個,並且沒有乙個函式可以使乙個程序獲取其子程序的程序id

子程序返回0的原因:乙個程序只有乙個父程序,所以子程序總是可以呼叫getppid來獲取其父程序的程序id(程序0總是有核心交換程序使用,所以乙個子程序的id不可能是0)

二、vfork

pid_t vfork(void);
功能:建立乙個新的程序,與fork功能基本一致。

注意:當執行vfork時,子程序先返回,此時它占用了父程序的位址空間,當子程序成功建立後(通過exec載入可執行程式),父程序才返回。

三、fork和vfork的區別

1、通過vfork建立的程序不複製父程序的位址空間(資料段、bss段、堆、棧、io流、緩衝區的拷貝),必須通過exec系列函式載入自己的可執行程式

2、vfork會使子程序先返回執行,而fork誰先返回不一定

OrCAD VCC5V和VCC3 3V 短路問題

經常遇到乙個很奇怪的問題,10.5版本畫的原理圖在用高版本如16.3 16.5開啟後會出現5v和3.3v短路的情況,這樣drc檢查不會報錯,若到pcb layout時依然不能發現此問題,則會導致pcb板上的電源5v和3.3v連到一起。如下圖 圖1 經過反覆的實驗發現了原因 運放的電源pin一般都命名...

1V公升壓5V和1 5V公升壓5V的積體電路晶元

1.5v和1v輸入,要公升壓輸出5v的積體電路晶元合適?乾電池標準電壓是1.5v,放電電壓後面在0.9v 1v左右,如果要選用乾電池1.5v公升壓到5v的合適的晶元,需要滿足低壓1v或者0.9v更好的低壓輸入範圍的公升壓晶元。pw5100是輸入電壓範圍在0.7v低壓,到5v的寬範圍輸入電壓。適用於乾...

18V轉3 3V的電源晶元和40V的LDO

18v轉3.3v,15v轉3.3v的ldo pw6206的輸入電壓4.75v 40v,負載電流為在電壓 5v和vin 7v時高達300ma。該裝置採用bcd工藝製造。pw6206 提供過電流限制 軟啟動和過溫保護,確保裝置工作在正常情況下。pw6206提供3v,3.3v,5v輸出電壓選擇,靜態電流4...