fork - 繼承還是不繼承

http://www.cublog.cn/u2/61322/showart_1270907.html

知道子進程父進程繼承什麼或未繼承什麼將有助於我們。下面這個名單會因爲 不同Unix的實現而發生變化,所以或許準確性有了水份。請注意子進程得到的是 這些東西的 *拷貝*,不是它們本身。

由子進程父進程繼承到:

  • 進程的資格(真實(real)/有效(effective)/已保存(saved) 用戶號(UIDs)和組號(GIDs))

  • 環境(environment)

  • 堆棧

  • 內存

  • 打開文件的描述符(注意對應的文件的位置由父子進程共享, 這會引起含糊情況)

  • 執行時關閉(close-on-exec) 標誌 (譯者注:close-on-exec標誌可通過fnctl()對文件描 述符設置,POSIX.1要求所有目錄流都必須在exec函數調用時關閉。更詳細說明, 參見《UNIX環境高級編程》 W. R. Stevens, 1993, 尤晉元等譯(以下簡稱《高級編程》), 3.13節和8.9節)

  • 信號(signal)控制設定

  • nice值 (譯者注:nice值由nice函數設定,該值表示進程的優先級, 數值越小,優先級越高)

  • 進程調度類別(scheduler class) (譯者注:進程調度類別指進程在系統中被調度時所屬的類別,不同類別有不同優先級,根據進程調度類別和nice值,進程調度程序可計算出每個進程的全局優先級(Global process prority),優先級高的進程優先執行)

  • 進程組號

  • 對話期ID(Session ID) (譯者注:譯文取自《高級編程》,指:進程所屬的對話期 (session)ID, 一個對話期包括一個或多個進程組, 更詳細說明參見《高級編程》 9.5節)

  • 當前工作目錄

  • 根目錄 (譯者注:根目錄不一定是“/”,它可由chroot函數改變)

  • 文件方式創建屏蔽字(file mode creation mask (umask)) (譯者注:譯文取自《高級編程》,指:創建新文件的缺省屏蔽字)

  • 資源限制

  • 控制終端

子進程所獨有:

  • 進程

  • 不同的父進程號(譯者注: 即子進程父進程號與父進程父進程號不同, 父進程號可由getppid函數得到)

  • 自己的文件描述符和目錄流的拷貝(譯者注: 目錄流由opendir函數創建,因其爲順序讀取,顧稱“目錄流”)

  • 子進程繼承父進程進程,正文(text), 數據和其它鎖定內存(memory locks) (譯者注:鎖定內存指被鎖定的虛擬內存頁,鎖定後, 不允許內核將其在必要時換出(page out), 詳細說明參見《The GNU C Library Reference Manual》 2.2版, 1999, 3.4.2節)

  • 在tms結構中的系統時間(譯者注:tms結構可由times函數獲得, 它保存四個數據用於記錄進程使用中央處理器 (CPU:Central Processing Unit)的時間,包括:用戶時間,系統時間, 用戶各子進程合計時間,系統各子進程合計時間)

  • 資源使用(resource utilizations)設定爲0

  • 阻塞信號集初始化爲空集(譯者注:原文此處不明確, 譯文根據fork函數手冊頁稍做修改)

  • 繼承由timer_create函數創建的計時器

  • 繼承異步輸入和輸出

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章