Linux進程狀態切換


Linux進程狀態切換

volatile long stage在進程控制塊中描述進程狀態


在Linux下,一個進程可以有5種不同的狀態。

  • 運行狀態(TASK_RUNNING):
    指正在被CPU運行或者就緒的狀態。這樣的進程被成為runnning進程。運行態的進程可以分為3種情況:內核運行態、用戶運行態、就緒態。

  • 可中斷睡眠狀態(TASK_INTERRUPTIBLE):
    處於等待狀態中的進程,一旦被該進程等待的資源被釋放,那么該進程就會進入運行狀態。

  • 不可中斷睡眠狀態(TASK_UNINTERRUPTIBLE):
    該狀態的進程只能用wake_up()函數喚醒。

  • 暫停狀態(TASK_STOPPED):
    當進程收到信號SIGSTOP、SIGTSTP、SIGTTIN或SIGTTOU時就會進入暫停狀態。可向其發送SIGCONT信號讓進程轉換到可運行狀態。

  • 僵死狀態(TASK_ZOMBIE):
    當進程已經終止運行,但是父進程還沒有詢問其狀態的情況。

注意:

只有當進程從“內核運行態”轉移到“睡眠狀態”時,內核才會進行進程切換操作。在內核態下運行的進程不能被其它進程搶占,而且一個進程不能改變另一個進程的狀態。為了避免進程切換時造成內核數據錯誤,內核在執行臨界區代碼時會禁止一切中斷。

Liunx進程控制塊:task_struct

task_struct里面包含了文件管理和內存管理相關的數據結構

ps -aux 獲取進程列表


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM