溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

fork函數(shù)是什么

發(fā)布時間:2021-10-14 15:44:44 來源:億速云 閱讀:219 作者:柒染 欄目:編程語言

這篇文章將為大家詳細講解有關(guān)fork函數(shù)是什么,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

fork函數(shù)

      
在linux中,只有一個函數(shù)可以創(chuàng)建子進程:fork。

    #include <sys/types.h>

    #include <unistd.h>

    pid_t fork(void);


由f o r k創(chuàng)建的新進程被稱為子進程( child process)。該函數(shù)被調(diào)用一次,但返回兩次。兩次返回的區(qū)別是子進程的返回值是0,而父進程的返回值則是新子進程的進程I
D。將子進程I D返回給父進程的理由是:因為一個進程的子進程可以多于一個,所以沒有一個函數(shù)使一個進程可以獲得其所有子進程的進程I D。f o r k使子進程得到返回值0的理由是:一個進程只會有一個父進程,所以子進程總是可以調(diào)用g
e t p p i d以獲得其父進程的進程I D (進程ID 0總是由交換進程使用,所以一個子進程的進程I D不可能為0
)。

      
子進程和父進程共享很多資源,除了打開文件之外,很多父進程的其他性質(zhì)也由子進程繼承:

?
實際用戶I D、實際組I D、有效用戶I D、有效組I D。

?
添加組I D。

?
進程組I D。

?
對話期I D。

?
控制終端。

?
設(shè)置-用戶- I D標志和設(shè)置-組- I D標志。

?
當(dāng)前工作目錄。

?
根目錄。

?
文件方式創(chuàng)建屏蔽字。

?
信號屏蔽和排列。

?
對任一打開文件描述符的在執(zhí)行時關(guān)閉標志。

?
環(huán)境。

?
連接的共享存儲段。

?
資源限制。

      
父、子進程之間的區(qū)別是:

? 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設(shè)置為0。

?
父進程設(shè)置的鎖,子進程不繼承。

?
子進程的未決告警被清除。

?
子進程的未決信號集設(shè)置為空集。

      
使f o r k失敗的兩個主要原因是:( a )系統(tǒng)中已經(jīng)有了太多的進程(通常意味著某個方面出了問題),或者(
b )該實際用戶I D的進程總數(shù)超過了系統(tǒng)限制?;貞洷? - 7,其中C H I L D _ M A X規(guī)定了每個實際用戶I
D在任一時刻可具有的最大進程數(shù)。

f o r k有兩種用法:

(1)
一個父進程希望復(fù)制自己,使父、子進程同時執(zhí)行不同的代碼段。這在網(wǎng)絡(luò)服務(wù)進程中是常見的——父進程等待委托者的服務(wù)請求。當(dāng)這種請求到達時,父進程調(diào)用f o r k,使子進程處理此請求。父進程則繼續(xù)等待下一個服務(wù)請求。

(2)
一個進程要執(zhí)行一個不同的程序。這對s h e l l是常見的情況。在這種情況下,子進程在從f o r k返回后立即調(diào)用e x e c。

我們從一個例子程序中可以看到fork函數(shù)的作用,子進程與父進程之間的資源共享。

關(guān)于fork函數(shù)是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI