您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關fork函數是什么,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
在linux中,只有一個函數可以創建子進程:fork。
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
由f o r k創建的新進程被稱為子進程( child process)。該函數被調用一次,但返回兩次。兩次返回的區別是子進程的返回值是0,而父進程的返回值則是新子進程的進程I
D。將子進程I D返回給父進程的理由是:因為一個進程的子進程可以多于一個,所以沒有一個函數使一個進程可以獲得其所有子進程的進程I D。f o r k使子進程得到返回值0的理由是:一個進程只會有一個父進程,所以子進程總是可以調用g
e t p p i d以獲得其父進程的進程I D (進程ID 0總是由交換進程使用,所以一個子進程的進程I D不可能為0
)。
子進程和父進程共享很多資源,除了打開文件之外,很多父進程的其他性質也由子進程繼承:
?
實際用戶I D、實際組I D、有效用戶I D、有效組I D。
?
添加組I D。
?
進程組I D。
?
對話期I D。
?
控制終端。
?
設置-用戶- I D標志和設置-組- I D標志。
?
當前工作目錄。
?
根目錄。
?
文件方式創建屏蔽字。
?
信號屏蔽和排列。
?
對任一打開文件描述符的在執行時關閉標志。
?
環境。
?
連接的共享存儲段。
?
資源限制。
父、子進程之間的區別是:
? fork的返回值。
?
進程I D。
?
不同的父進程I D。
?
子進程的t m s _ u t i m e , t m s _ s t i m e , t m s _ c u t i m e以及t m s _ u s t i m e設置為0。
?
父進程設置的鎖,子進程不繼承。
?
子進程的未決告警被清除。
?
子進程的未決信號集設置為空集。
使f o r k失敗的兩個主要原因是:( a )系統中已經有了太多的進程(通常意味著某個方面出了問題),或者(
b )該實際用戶I D的進程總數超過了系統限制。回憶表2 - 7,其中C H I L D _ M A X規定了每個實際用戶I
D在任一時刻可具有的最大進程數。
f o r k有兩種用法:
(1)
一個父進程希望復制自己,使父、子進程同時執行不同的代碼段。這在網絡服務進程中是常見的——父進程等待委托者的服務請求。當這種請求到達時,父進程調用f o r k,使子進程處理此請求。父進程則繼續等待下一個服務請求。
(2)
一個進程要執行一個不同的程序。這對s h e l l是常見的情況。在這種情況下,子進程在從f o r k返回后立即調用e x e c。
我們從一個例子程序中可以看到fork函數的作用,子進程與父進程之間的資源共享。
關于fork函數是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。