linux fork函式與vfork函式

2021-05-12 19:48:49 字數 929 閱讀 5314

一、fork

1. 呼叫方法

#include

#include

pid_t fork(void);

正確返回:在父程序中返回子程序的程序號,在子程序中返回0

錯誤返回:-1

子程序是父程序的乙個拷貝。即,子程序從父程序得到了資料段和堆疊段的拷貝,這些需要分配新的記憶體;而對於唯讀的**段,通常使用共享記憶體的方式訪問。fork返回後,子程序和父程序都從呼叫fork函式返回處開始執行。

父程序與子程序的不同之處在於:fork的返回值不同——父程序中的返回值為子程序的程序號,而子程序為0

2. fork函式呼叫的用途

⑴ 乙個程序希望複製自身,從而父子程序能同時執行不同段的**。

⑵ 程序想執行另外乙個程式

二、vfork

1. 呼叫方法

與fork函式完全相同

#include

#include

pid_t fork(void);

正確返回:在父程序中返回子程序的程序號,在子程序中返回0

錯誤返回:-1

2. vfork函式呼叫的用途

用vfork建立的程序主要目的是用exec函式執行另外的程式,與fork的第二個用途相同

三、fork與vfork的區別

1. fork要拷貝父程序的資料段;而vfork則不需要完全拷貝父程序的資料段,在子程序沒有呼叫exec和exit之前,子程序與父程序共享資料段

2. fork不對父子程序的執行次序進行任何限制;而在vfork呼叫中,子程序先執行,父程序掛起,直到子程序呼叫了exec或exit之後,父子程序的執行次序才不再有限制

四、結束子程序

結束子程序不用exit(0),而使用_exit(0)。這是因為_exit(0)在結束程序時,不對標準i/o流進行任何操作。而exit(0)則會關閉程序的所有標準i/o流。

linux fork 函式學習

分類 專業學習 include include include int main case 0 default printf n d n n return 0 輸出結果1 fork child i am child parent i am parent parent getpid 4496 pare...

linux fork函式學習

在編寫socket ftp之前,我對fork函式進行了學習。先看這段範例 include include main 這段 寫了乙個使用fork函式建立子程序,父子程序同時執行而產生交錯的,不一樣的執行結果。執行結果如下 a.out i am the child process,my process ...

linux fork函式的精闢解說

開始演示 plain view plaincopyprint?root test code cat fork.c include include include main root test code gcc fork.c o fork root test code fork i am the ch...