linux進程狀態及轉換關係

linux中的進程狀態:

◆運行狀態(TASK_RUNNING)

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

◆可中斷睡眠狀態(TASK_INTERRUPTIBLE)

處於等待狀態中的進程,一旦被該進程等待的資源被釋放,那麼該進程就會進入運行狀態。

◆不可中斷睡眠狀態(TASK_UNINTERRUPTIBLE)

該狀態的進程只能用wake_up()函數喚醒。

◆暫停狀態(TASK_STOPPED)

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

◆僵死狀態(TASK_ZOMBIE)

當進程已經終止運行,但是父進程還沒有詢問其狀態的情況。


注意:

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章