# 程序的狀態 ## 程序的五種基本狀態: - 新建(New)狀態: - 執行緒還沒有開始執行,也還沒被分配到相關資源,此時執行緒處在新建狀態。 - 就緒(Ready)狀態: - 當程序已被分配到除CPU以外的所有必要的資源,只要獲得CPU便可立即執行,這時的程序狀態稱為就緒狀態。 - 執行(Running)狀態: - 當程序已獲得處理機,其程式正在CPU上執行,此時的程序狀態稱為執行狀態。 - 等待(Waiting)狀態: - 正在執行的程序,由於等待某個事件發生而無法執行時,便放棄CPU而處於阻塞狀態。 - 引起程序阻塞的事件可有多種,例如:等待I/O完成、申請緩衝區不能滿足、等待信件(訊號)等。 - 結束(Terminated)狀態: - 釋放資源並結束程序。 - ※ 面試題: Waitimg狀態不會直接進到Running狀態,而是要先到Ready中再等待CPU調用。 ## 異常程序: - 基本概念: - 子程序的結束和父程序的執行是一個非同步過程,即父程序無法預測子程序什麼時候結束。 - 當一個程序完成它的工作終止之後,它的父程序需要呼叫wait()或者waitpid()系統呼叫取得子程序的終止狀態。 - 殭屍程序: - 當子程序已終止,而父程序卻沒有呼叫wait()或waitpid()獲取子程序的終止狀態資訊,所以該系統資訊將一直被佔用,直到父程序獲取。 - 殭屍程序終止的兩種情況: - 父程序獲取終止狀態 - 父程序終止,該程序組資源全部被回收 - 如果某父程序產生的殭屍程序過多,會對系統造成較大影響。 - 孤兒程序: - 當父程序已經終止而子程序仍在執行時,此時子程序就相當於一個孤兒,即為孤兒程序。 - 孤兒程序會被init程序(PID為1的程序)收養,此後的收尾工作均由init程序負責。 - init將會以父程序的身份對子程序進行處理。 - 形象的解釋: - init程序就好像一個民政局,每出現一個孤兒,init會立即領養,知道該孤兒完成自己的所有使命,init會代表政府做好它的所有善後工作,因此,孤兒程序並不會有什麼危害。 - 守護程序: - 守護程序會隨著系統的啟動默默的在後臺執行,沒有與控制終端與相連的程序。 - 它獨立於控制終端,通常週期性地執行某種任務(EX: 殺死父程序,清理殭屍程序等)。 ###### tags: `OS`