linux任務的幾種狀態

2021-10-06 16:46:53 字數 1159 閱讀 1744

linux任務的幾種狀態

而我們用ps,top看到的任務狀態還需要轉一下

r:任務正在cpu上執行,或已獲取除cpu外所有的資源,正在等待排程執行,當linux任務無法獲取所需資源時,如通過軟中斷陷入核心態呼叫會引起阻塞的系統呼叫read,accept,epoll_wait,select等,不能繼續執行下去時會在核心態改變自己的狀態為阻塞態,然後進行任務切換

s:當阻塞可以被訊號中斷如net read,net write,accept,epoll_wait,select時就設狀態為task_interruptible也就是top看到的s狀態

d:當陷入到核心態後完成相關操作時的阻塞不可以被訊號中斷,如當由於讀寫磁碟無法立即滿足時,磁碟等待佇列已經很長了,這時乙個linux任務再發起乙個disk read,而恰好此read所需的資料所在的磁碟block未被cache在檔案系統的高速緩衝區,此linux任務就會被設為task_uninterruptible等待磁碟驅動程式io完成,也就是top看到的d狀態,而此時iowait及系統負載也是很高的,而此狀態其實並不只是包含disk sleep,disk sleep只是我們常見到的導致務狀態是d一種情況,可能是歷史原因最初os只有磁碟讀寫會被設為task_uninterruptible

t:被sigstop訊號暫停,strace跟蹤,gdb除錯時的狀態

z:當父程序未退出,子程序退出但父程序未忽略sigcld訊號,時子程序的狀態,在父程序收屍後狀態會轉變為x,如果父程序不及時呼叫wait收屍,系統會存在殭屍程序占用程序描述符

x:當父程序忽略sigcld訊號,子程序退出時的狀態

當乙個s,d狀態的linux任務已獲取到所需資源如read到資料,accept到新連線,獲取到鎖時,就會從s,d狀態轉變為r狀態,狀態r代表任務正在cpu上執行或已經獲取到所有除cpu外的所有資源,萬事俱備只欠東風,只待被排程器選中排程到cpu上執行了

同樣是read write,為什麼net read wirte阻塞後是task_interruptible,而被disk read wirte阻塞後是task_uninterruptible?

Linux程序的幾種狀態

linux是乙個多使用者,多工的系統,可以同時執行多個使用者的多個程式,就必然會產生很多的程序,而每個程序會有不同的狀態。linux程序狀態 r task running 可執行狀態。只有在該狀態的程序才可能在cpu上執行。而同一時刻可能有多個程序處於可執行狀態,這些程序的task struct結構...

FreeRTOS學習筆記3 任務的幾種狀態及轉換

如果將所有任務都設定在相同的優先順序,那麼在系統跑起來之後,所有任務將進行輪盤式的排程。如果任務僅僅具有不同的優先順序而沒有經過其他處理時。高優先順序的任務將一直重複執行,將低優先順序的任務 餓死 starved 事件驅動 為了使我們的任務切實有用,我們需要通過某種方式來進行事件驅動。乙個事件驅動任...

UCOSIII的任務狀態

1 休眠態 任務已經在cpu的flash中了,但是還沒有交給ucosiii管理。2 就緒態 系統為任務分配了任務控制塊,並且任務已經在就緒表中登記,這時這個任務就具有了執行的條件,此時任務的狀態就是就緒態。3 執行態 任務獲得cpu的使用權,正在執行。任何時刻只能有乙個任務處於執行態。4 等待態 正...