vfork函式建立出的父子程序

2021-07-22 04:09:48 字數 875 閱讀 1972

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

例:1 #include

2 #include

3 #include

4 #include

5 6 int main()

7 18         else

19        

22         return 0;

23 }

在執行這個程式之後,會發生什麼情況呢?執行結果如下:

在列印了第一行child,running first之後,每隔一秒列印兩行father...和child...。

這是由於在子程序呼叫exec或exit之前,在父程序空間中執行,也就是說會更改父程序的資料段,棧和堆。每個程序在核心中都有乙個程序控制塊(pcb)來維護程序相關的資訊。子程序在執行sleep(1)時,更改了父程序中程序控制塊的程式計數器,程式中將被執行下一條指令的位址被修改為子程序的位址,所以在父程序結束後又執行了子程序。如此迴圈往復就得到了我們看到的情況。

若在原始檔中加上exit(0),結果如何?

在列印child...之後一秒列印father...程式執行結束。由於子程序在sleep(1)後退出,那麼父程序結束後程式結束。

總結:1:vfork保證子程序先執行,在它呼叫exec或者exit後父程序才被排程執行;

2:在子程序呼叫exec或exit之前,在父程序空間中執行,會改變父程序的pcb。

程序建立函式fork與vfork

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

程序建立fork 和vfork

乙個現有的程序可以通過兩種方式建立乙個新的程序,下面詳細介紹兩種fork vfork 函式原型 man 手冊 include pid t fork void 描述 fork 以當前的程序為副本建立乙個新的程序,新建立的程序被稱為子程序,當前的程序被稱為父程序,父程序和子程序執行在各自的位址空間。返回...

程序的建立 fork與vfork

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