檢視程序
程序狀態
孤兒程序
執行中的程式。要執行main這個程式,作業系統找到對應main的pcb,在pcb上讀取main執行所需要的的資訊,載入到cpu上,cpu就開始執行這個程式了。對於作業系統來說就是pcb程序控制塊,在linux中就是乙個task_struct結構體。
是作業系統對程式執行的動態描述,系統通過這個描述實現程式執行的管理和排程。
(task_struct內容)
上下文資料:程序執行時處理器的暫存器中的資料。
程序id:用於標識程序的唯一數值。
i/o資訊:包括顯示的i/o請求,分配給程序的i/o裝置和被程序使用的檔案列表。
程序優先順序:相對於其他程序的優先順序。
程序狀態:執行態,可中斷休眠態,不可中斷休眠態,死亡態,殭屍態……
可以通過/proc、top 、ps等指令檢視程序狀態。
程序id:pid
父程序id:ppid
printf
("pid = %d\n"
,getpid()
);printf
("ppid = %d\n"
,getppid()
);
通過返回值來區分父子程序:
返回值為0時,表示子程序。
返回值大於0時,表示父程序,且返回值為新建立的子程序的pid。
返回值小於0時,表示fork出現錯誤。
#include
#include
intmain()
else
return0;
}
執行態r:不一定表示程序正在執行中,表明程序在執行中或者在執行佇列裡。
可中斷休眠態s: 可以被中斷的休眠狀態,滿足喚醒條件或者休眠被中斷進入執行態。
不可中斷休眠態d:不能被中斷的休眠態,滿足喚醒條件進入執行態。
停止態t:程式停止執行(會被排程)
殭屍態z:程序已經退出不再排程了,但是程序的資源還沒被釋放等待處理的狀態
是處於殭屍態的程序,是一種退出了,資源還沒完全釋放的程序。
產生過程:
子程序先於父程序退出,父程序沒有關注到子程序的退出,系統不會完全釋放子程序的資源,子程序進入殭屍態。讓父程序休息30s後退出,在另乙個終端檢視程序狀態。子程序退出,父程序休眠沒有關注到子程序退出,子程序進入殭屍態子程序退出後,在pcb中儲存了自己的退出返回值,在父程序沒有關注處理的情況下,pcb資源不會被釋放。
危害資源洩露:
pcb的資源沒法被釋放
使用者能建立的程序數有限
父程序先於子程序退出,子程序會成為孤兒程序,執行在後台,父程序成為一號程序。
發現pid為6080的子程序還在後台執行,s態。
Linux下的程序概念,程序狀態和程序等待
程序就是乙個pcb process control block 是作業系統對執行中程式的描述,通過這個描述實現對執行中程式的排程管理,linux下pcb是乙個task struct結構體,task struct是linux核心的一種資料結構。task struct結構體中的內容 包括記憶體指標,上下...
Linux 程序概念以及程序狀態理解
2 程序狀態 2.2 孤兒程序 2.3 守護程序 精靈程序 程序是乙個pcb 程序控制塊 是乙個執行程式中的描述 在linux下是乙個task struct結構體,通過這個結構體實現作業系統對執行中程式的排程管理。1.1 task struct結構體 task struct結構體是linux核心中的...
殭屍程序和孤兒程序 概念
這裡僅給出殭屍程序和孤兒程序的概念。深入了解計算機系統 原書第3版 和網上的部落格,下面會給出部落格 前言 子程序 當乙個程序由於某種原因終止時,核心並不是立即把它從系統中清除。相反,程序被保持在一種已終止的狀態中,直到被它的父程序 reaped 當父程序 已終止的子程序時,核心將子程序的退出狀態傳...