Linux進程的狀態轉換圖

來源:互聯網
上載者:User

◆運行狀態(TASK_RUNNING)
當進程正在被CPU執行,或已經準備就緒隨時可由發送器執行,則稱該進程為處於運行狀態(running)。進程可以在核心態運行,也可以在使用者態運行。當系統資源已經可用時,進程就被喚醒而進入準備運行狀態,該狀態稱為就緒態。這些狀態(圖中中間一列)在核心中表示方法相同,都被成為處於TASK_RUNNING狀態。
◆可中斷睡眠狀態(TASK_INTERRUPTIBLE)
當進程處於可中斷等待狀態時,系統不會調度該進程執行。當系統產生一個中斷或者釋放了進程正在等待的資源,或者進程收到一個訊號,都可以喚醒進程轉換到就緒狀態(運行狀態)。
◆不可中斷睡眠狀態(TASK_UNINTERRUPTIBLE)
與可中斷睡眠狀態類似。但處於該狀態的進程只有被使用wake_up()函數明確喚醒時才能轉換到可啟動並執行就緒狀態。
◆暫停狀態(TASK_STOPPED)
當進程收到訊號SIGSTOP、SIGTSTP、SIGTTIN或SIGTTOU時就會進入暫停狀態。可向其發送SIGCONT訊號讓進程轉換到可運行狀態。在Linux 0.11中,還未實現對該狀態的轉換處理。處於該狀態的進程將被作為進程終止來處理。
◆僵死狀態(TASK_ZOMBIE)
當進程已停止運行,但其父進程還沒有詢問其狀態時,則稱該進程處於僵死狀態。
當一個進程的已耗用時間片用完,系統就會使用發送器強制切換到其它的進程去執行。另外,如果進程在核心態執行時需要等待系統的某個資源,此時該進程就會調用sleep_on()或sleep_on_interruptible()自願地放棄CPU的使用權,而讓發送器去執行其它進程。進程則進入睡眠狀態(TASK_UNINTERRUPTIBLE或TASK_INTERRUPTIBLE)。
只有當進程從“核心運行態”轉移到“睡眠狀態”時,核心才會進行進程切換操作。在核心態下啟動並執行進程不能被其它進程搶佔,而且一個進程不能改變另一個進程的狀態。為了避免進程切換時造成核心資料錯誤,核心在執行臨界區代碼時會禁止一切中斷。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.