在UNIX里,除了進程0(即PID=0的交換進程,Swapper Process)以外的所有進程都是由其他進程使用系統調用fork創建的,這里調用fork創建新進程的進程即為父進程,而相對應的為其創建出的進程則為子進程,因而除了進程0以外的進程都只有一個父進程,但一個進程可以有多個子進程。

操作系統內核以進程標識符(Process Identifier,即PID)來識別進程。進程0是系統引導時創建的一個特殊進程,在其調用fork創建出一個子進程(即PID=1的進程1,又稱init)后,進程0就轉為交換進程(有時也被稱為空閑進程),而進程1(init進程)就是系統里其他所有進程的祖先。

僵尸進程與孤兒進程


當一個子進程結束運行(一般是調用exit、運行時發生致命錯誤或收到終止信號所導致)時,子進程的退出狀態(返回值)會回報給操作系統,系統則以SIGCHLD信號將子進程被結束的事件告知父進程,此時子進程的進程控制塊(PCB)仍駐留在內存中。一般來說,收到SIGCHLD后,父進程會使用wait系統調用以獲取子進程的退出狀態,然后內核就可以從內存中釋放已結束的子進程的PCB;而如若父進程沒有這么做的話,子進程的PCB就會一直駐留在內存中,也即成為僵尸進程。

孤兒進程則是指父進程結束后仍在運行的子進程。在類UNIX系統中,孤兒進程一般會被init進程所“收養”,成為init的子進程。

為避免產生僵尸進程,實際應用中一般采取的方式是:

將父進程中對SIGCHLD信號的處理函數設為SIG_IGN(忽略信號);

fork兩次并殺死一級子進程,令二級子進程成為孤兒進程而被init所“收養”、清理。

Linux

在Linux內核中,進程和POSIX線程有著相當微小的區別,父進程的定義也與UNIX不盡相同。Linux有兩種父進程,分別稱為(形式)父進程與實際父進程,對于一個子進程來說,其父進程是在子進程結束時收取SIGCHLD信號的進程,而實際父進程則是在多線程環境里實際創建該子進程的進程。對于普通進程來說,父進程與實際父進程是同一個進程,但對于一個以進程形式存在的POSIX線程,父進程和實際父進程可能是不一樣的。

 

子進程


在計算機領域中,子進程為由另外一個進程(對應稱之為父進程)所創建的進程。子進程繼承了父進程的大部分屬性,例如文件描述符。

產生


在Unix中,子進程通常為系統調用fork的產物。在此情況下,子進程一開始就是父進程的副本,而在這之后,根據具體需要,子進程可以借助exec調用來鏈式加載另一程序。

與父進程的關系


一個進程可能下屬多個子進程,但最多只能有1個父進程,而若某一進程沒有父進程,則可知該進程很可能由內核直接生成。在Unix與類Unix系統中,進程ID為1的進程(即init進程)是在系統引導階段由內核直接創建的,且不會在系統運行過程中終止執行(可參見Linux啟動流程);而對于其他無父進程的進程,則可能是為在用戶空間完成各種后臺任務而執行的。

當某一子進程結束、中斷或恢復執行時,內核會發送SIGCHLD信號予其父進程。在默認情況下,父進程會以SIG_IGN函數忽略之。

“孤兒進程”與“僵尸進程”


在對應的父進程結束執行后,進程就會變成孤兒進程,但之后會立即由init進程“收養”為其子進程。

某一子進程終止執行后,若其父進程未提前調用wait,則內核會持續保留子進程的退出狀態等信息,以使父進程可以wait獲取之。而因為在這種情況下,子進程雖已終止,但仍在消耗系統資源,所以其亦稱僵尸進程。wait常于SIGCHLD信號的處理函數中調用。

解決與預防

在POSIX.1-2001標準規定中,父進程可將SIGCHLD的處理函數設為SIG_IGN(亦為默認設定),或為SIGCHLD設定SA_NOCLDWAIT標記,以使內核可以自動回收已終止的子進程的資源。自Linux 2.6與FreeBSD 5.0起,兩種內核皆支持了這兩種方式。但是,在忽略SIGCHLD信號的問題上,由于System V與BSD由來已久的差異,若要回收派生出的子進程的資源,調用wait仍是最便捷的方式。

我們的公共號

更多關于云服務器域名注冊,虛擬主機的問題,請訪問三五互聯官網:m.shinetop.cn

贊(0)
聲明:本網站發布的內容(圖片、視頻和文字)以原創、轉載和分享網絡內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。郵箱:3140448839@qq.com。本站原創內容未經允許不得轉載,或轉載時需注明出處:三五互聯知識庫 » 父進程和子進程

登錄

找回密碼

注冊

主站蜘蛛池模板: 平江县| 国产成人精品亚洲午夜麻豆| 国产精品中出一区二区三区| 久久精品波多野结衣| 亚洲制服无码一区二区三区 | 亚洲AV无码久久精品成人| 国产日产免费高清欧美一区| 婷婷久久香蕉五月综合加勒比| 人成午夜免费视频在线观看| 尤物yw193无码点击进入| 欧美videos粗暴| 伊伊人成亚洲综合人网7777| 人人妻人人澡人人爽不卡视频| 国产高清精品在线91| 小嫩批日出水无码视频免费| 99久久久国产精品免费无卡顿| 亚洲欧洲日产国码久在线| 人妻少妇精品视频专区| 樱花影院电视剧免费| 国产偷人妻精品一区二区在线 | 综合色天天久久| 疯狂做受XXXX高潮国产| 国产中文字幕一区二区| 春菜花亚洲一区二区三区| 伊人精品久久久大香线蕉| 免费人成再在线观看视频| 久久精品蜜芽亚洲国产AV| 国产一区二区三区的视频| 理论片午午伦夜理片影院99| 亚洲国产日韩一区三区| 青草青草久热精品视频在线观看 | 自拍第一区视频在线观看| 好姑娘6电影在线观看| 懂色AV| 亚洲午夜福利AV一区二区无码| 一本大道卡一卡二卡三乱码全集资源| 亚洲AV片一区二区三区| 亚洲精品动漫免费二区| 国产免费又黄又爽又色毛| 少妇人妻偷人精品免费| 婷婷五月综合激情|