什麼是父進程和子進程
父進程
在電腦領域,父進程(英文:Parent Process)指已建立一個或多個子進程的進程。
UNIX
#在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
仍是最便捷的方式。
以上是什麼是父進程和子進程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

explorer.exe是什麼進程在我們使用Windows作業系統的時候,常常會聽到一個名詞"explorer.exe".那麼,你是否好奇這個進程到底是什麼?在本文中,我們將詳細解釋explorer.exe是什麼進程以及其功能和作用。首先,explorer.exe是Windows作業系統的關鍵流程,它負責管理和控制Windows資源管理器(Window

「com surrogate」是「C:\Windows\System32\dllhost.exe」的進程;出現該進程通常是「COM+」元件停止運作,這個進程佔用高甚至直接未回應,這是由於電腦在載入檔案圖示的時候出現問題,導致電腦變的卡頓,可以在電腦屬性設定中解決卡頓問題。

ccsvchst.exe是一種常見的進程文件,它是SymantecEndpointProtection(SEP)軟體的一部分,而SEP則是一款由著名的網路安全公司Symantec開發的終端保護解決方案。作為該軟體的一部分,ccsvchst.exe負責管理和監控SEP的相關進程。首先,我們來了解SymantecEndpointProtection(

在Linux系統中,殭屍行程是已經終止但仍保留在系統中的特殊流程。雖然殭屍行程不會消耗太多資源,但如果數量太多,可能會導致系統資源耗盡。本文將介紹如何正確清除殭屍進程,以確保系統的正常運作。 1Linux殭屍行程子程序完成任務後,如果父行程沒有及時檢查狀態,子行程將成為殭屍行程。子進程在等待父進程確認,完成後系統才會回收。否則,殭屍行程會繼續懸掛在系統中。若要檢查系統中是否有殭屍進程,可透過執行命令top來查看所有正在執行的進程及可能存在的殭屍進程。 ‘top’指令的結果從上圖可以看到Linux中進

Linux程序優先級調整方法詳解在Linux系統中,進程的優先順序決定了其在系統中的執行順序和資源分配。合理調整進程的優先順序可以提高系統的效能和效率。本文將詳細介紹Linux中如何調整進程的優先級,並提供具體的程式碼範例。一、進程優先權概述在Linux系統中,每個行程都有一個與之相關聯的優先權。優先權的範圍一般是-20到19,其中-20表示最高優先權,19表

如何在Windows11和Windows10中暫停工作管理員進程更新按CTRL+視窗鍵+刪除開啟工作管理員。預設情況下,任務管理器將開啟「進程」視窗。正如您在此處看到的,所有應用程式都在無休止地移動,當您想要選擇它們時,可能很難將它們指向下方。因此,按CTRL並按住它,這將暫停任務管理器。您仍然可以選擇應用程序,甚至可以向下捲動,但您必須始終按住CTRL按鈕。

為什麼Linux中的行程會處於休眠狀態?在Linux作業系統中,進程可能會處於休眠狀態,這是由於多種不同的原因和條件造成的。當進程處於休眠狀態時,表示該進程暫時被掛起,無法繼續執行,直到滿足某種條件後才能被喚醒繼續執行。接下來將詳細介紹在Linux中進程進入休眠狀態的幾種常見情況,並透過具體的程式碼範例加以說明。等待I/O完成:當進程發起一個I/O操作(例如讀取

《Linux系統無PHP進程的檢測方法,需要具體程式碼範例》在使用Linux系統進行Web開發時,經常會依賴PHP進程來處理動態頁面和邏輯,而有時候我們可能需要監測伺服器上是否有PHP進程。本文將介紹一種偵測Linux系統中是否存在PHP進程的方法,並給出具體的程式碼範例。為什麼需要偵測PHP進程在Web開發中,PHP進程扮演著至關重要的角色,它負責解析執行P
