fork函式與vfork函式
一、fork
1. 呼叫方法
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
正確返回:在父程式中返回子程式的程式號,在子程式中返回0
錯誤返回:-1
子程式是父程式的一個拷貝。即,子程式從父程式得到了資料段和堆疊段的拷貝,這些需要分配新的記憶體;而對於只讀的程式碼段,通常使用共享記憶體的方式訪問。fork返回後,子程式和父程式都從呼叫fork函式的下一條語句開始執行。
父程式與子程式的不同之處在於:fork的返回值不同——父程式中的返回值為子程式的程式號,而子程式為0
2. fork函式呼叫的用途
⑴ 一個程式希望複製自身,從而父子程式能同時執行不同段的程式碼。
⑵ 程式想執行另外一個程式
二、vfork
1. 呼叫方法
與fork函式完全相同
#include <sys/types.h>
#include <unistd.h>
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流。
相關文章
- fork()與vfork()函式函式
- 理解 pcntl_fork 函式函式
- 研究linux函式 之 fork()Linux函式
- 作業系統---之fork()函式作業系統函式
- Python函式與lambda 表示式(匿名函式)Python函式
- webgl內建函式--幾何函式與矩陣函式Web函式矩陣
- webgl內建函式--向量函式與紋理查詢函式Web函式
- 何時使用函式表示式與函式宣告函式
- Oracle分析函式與視窗函式Oracle函式
- 建構函式與解構函式函式
- 函式節流與函式防抖函式
- 回撥函式 與 函式閉包函式
- python內建函式-eval()函式與exec()函式的區別Python函式
- MySQL函式大全(字串函式,數學函式,日期函式,系統級函式,聚合函式)MySql函式字串
- 函式外與函式內的變數函式變數
- 普通函式與函式模板呼叫規則函式
- 箭頭函式與普通函式區別函式
- python中id()函式、zip()函式、map()函式、lamda函式Python函式
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter
- 函式宣告與函式表示式有什麼區別?函式
- echo與函式函式
- 【多程式】Linux中fork()函式詳解|多程式Linux函式
- 建構函式與普通函式的區別函式
- C++中函式指標與函式物件C++函式指標物件
- 箭頭函式與普通函式的區別函式
- 15.3 極限函式與和函式性質函式
- 普通函式與函式模板呼叫規則2函式
- 函式與極限 第一節 對映與函式函式
- 第7章 IF函式 COUNTIF函式 SUMIF函式函式
- MySQL(四)日期函式 NULL函式 字串函式MySql函式Null字串
- 函式正規化入門(惰性求值與函式式狀態)函式
- 生成函式與多項式函式
- 函式遞迴與生成式函式遞迴
- (譯) 函式式 JS #2: 函式!函式JS
- JavaScript的迭代函式與迭代函式的實現JavaScript函式
- 深入理解函式節流與函式防抖函式
- 第 8 節:函式-函式型別與作用域函式型別
- fill函式與memset函式的區別(c++)函式C++
- PHP筆記:建構函式與解構函式PHP筆記函式