linux中的進程狀態:
◆運行狀態(TASK_RUNNING)
指正在被CPU運行或者就緒的狀態。這樣的進程被成爲runnning進程。運行態的進程可以分爲3種情況:內核運行態、用戶運行態、就緒態。
◆可中斷睡眠狀態(TASK_INTERRUPTIBLE)
處於等待狀態中的進程,一旦被該進程等待的資源被釋放,那麼該進程就會進入運行狀態。
◆不可中斷睡眠狀態(TASK_UNINTERRUPTIBLE)
該狀態的進程只能用wake_up()函數喚醒。
◆暫停狀態(TASK_STOPPED)
當進程收到信號SIGSTOP、SIGTSTP、SIGTTIN或SIGTTOU時就會進入暫停狀態。可向其發送SIGCONT信號讓進程轉換到可運行狀態。
◆僵死狀態(TASK_ZOMBIE)
當進程已經終止運行,但是父進程還沒有詢問其狀態的情況。
注意:
只有當進程從“內核運行態”轉移到“睡眠狀態”時,內核纔會進行進程切換操作。在內核態下運行的進程不能被其它進程搶佔,而且一個進程不能改變另一個進程的狀態。爲了避免進程切換時造成內核數據錯誤,內核在執行臨界區代碼時會禁止一切中斷。