2、程序狀態
2.2 孤兒程序
2.3 守護程序/精靈程序
程序是乙個pcb(程序控制塊),是乙個執行程式中的描述;在linux下是乙個task_struct結構體,通過這個結構體實現作業系統對執行中程式的排程管理。
1.1 task_struct結構體
task_struct結構體是linux核心中的一種資料結構,他會被裝載在ram(記憶體)中幷包含程序的資訊。
1.2 task_struct內容分類
識別符號:描述本程序的唯一識別符號,用於區別與其他程序
狀態:任務狀態、退出訊號、退出**等
優先順序:相較於其他程序的優先順序
上下文資料:上一次正在處理的資料i/o狀態資訊:包括顯示的i/o請求、分配給程序的i/o裝置、被程序 使用的檔案列表
記賬資訊:記錄當前乙個程式已經在cpu上執行的時間其他
1.3 cpu的分時機制
程序在作業系統中排程是切換執行的,每個程序都有乙個cpu的時間片(乙個程序在cpu上執行的時間段),在cpu上時間片執行完畢後切換到下乙個程序。
1.4 程序的檢視
程序檢視指令是:ps
終端檢視指令是:tty
ps -ef 檢視的資訊較為粗略(-e表示檢視所有的,f表示以 樹狀的形式檢視)
ps -aux 檢視的資訊比較詳細
快速的定位檢視資訊:ps -ef | grep [檔名]
程序狀態檢視指令:ps aux 或 ps axj
執行:正在執行的程序
就緒:拿到時間片就能執行,處於等待的狀態
阻塞:沒有在執行
2.1 在linux下的程序狀態
2.2 殭屍程序
殭屍程序:處於僵死態的程序(程序已經退出,但是資源沒有完全釋放
)
產生殭屍狀態的原因
子程序先於父程序退出
,退出後,為了儲存自身的退出原因(返回值),因此資源沒有完全被釋放,作業系統這時候通知父程序獲取子程序的退出狀態,並允許作業系統釋放資源,但是若父程序沒有關注這個退出狀態,則子程序雖然退出了,但是資源沒有完全被釋放,處於僵死狀態,這個程序稱為殭屍程序。
總的來說就是:子程序先與父程序退出,但是父程序沒有關注子程序的退出狀態,導致子程序的資源沒有完全被釋放,故子程序進入僵死狀態
殭屍程序的危害
若父程序不讀取子程序的退出狀態,則子程序就一直處於僵死狀態當子程序處於僵死狀態時,父程序可能會讀取其狀態資訊,所以pcb要一直進行資料維護當建立子程序並不**就會造成資源浪費資源洩漏
殭屍程序的避免
程序等待:等待任意乙個子程序的退出,獲取退出子程序的返回值,並且釋放子程序的資源,防止出現殭屍程序
父程序通過wait和waitpid等函式等待子程序結束,這會導致父程序掛起。
如果父程序很忙,那麼可以用signal函式為sigchld安裝handler,因為子程序結束後, 父程序會收到該訊號,可以在handler中呼叫wait**。
如果父程序不關心子程序什麼時候結束,那麼可以用signal(sigchld,sig_ign) 通知核心,自己對子程序的結束不感興趣,那麼子程序結束後,核心會**, 並不再給父程序傳送訊號。
連續fork兩次,父程序fork乙個子程序,然後繼續工作,子程序fork一 個孫程序後退出,那麼孫程序被init接管,孫程序結束後,init會**。不過子程序的** 還要自己做。
2.2 孤兒程序
父程序先於子程序退出
,子程序就成為了孤兒程序,執行在系統後台,並且被1號程序(init程序)收養。此時孤兒程序退出後不會稱為殭屍程序,資源立即被**。
殺死程序的指令:kill + 程序id(只能殺死執行或休眠中的程序)
殺死乙個停止的程序指令:kill -
9+ 程序id
2.3 守護程序/精靈程序
詳細檢視部落格:守護程序已經建立守護程序
程序概念和程序狀態
檢視程序 程序狀態 孤兒程序 執行中的程式。對於作業系統來說就是pcb程序控制塊,在linux中就是乙個task struct結構體。是作業系統對程式執行的動態描述,系統通過這個描述實現程式執行的管理和排程。要執行main這個程式,作業系統找到對應main的pcb,在pcb上讀取main執行所需要的...
程序以及狀態
程序是資源分配的最小單元,也是執行緒的容器。同乙個程序可以包括多個執行緒,並且執行緒共享整個程序的資源 暫存器 堆疊 上下文 乙個程序至少包括乙個執行緒。程序結束後,程序中的擁有的執行緒都將銷毀,但是執行緒的結束不會影響同乙個程序中的其他執行緒的結束。乙個程式執行起來後,用到的資源稱之為程序,他是作...
Linux下的程序概念,程序狀態和程序等待
程序就是乙個pcb process control block 是作業系統對執行中程式的描述,通過這個描述實現對執行中程式的排程管理,linux下pcb是乙個task struct結構體,task struct是linux核心的一種資料結構。task struct結構體中的內容 包括記憶體指標,上下...