在Linux中,常見的進程狀態有以下幾種:
TASK_RUNNING 0
進程正在運行或者等待被調度運行
TASK_INTERRUPTIBLE 1
進程由於等待某個系統資源或者某個事件而處於掛起(睡眠)狀態。對其發送信號(signal),可以將其喚醒(進入TASK_RUNNING狀態)。
TASK_UNINTERRUPTIBLE 2
進程由於等待某個系統資源或者某個事件而處於掛起(睡眠)狀態。在此狀態下,信號無法將其喚醒。
TASK_STOPPED 132
進程暫停運行。在進程收到以下信號時,被置於此種狀態:SIGSTOP,SIGTSTP,SIGTTIN以及SIGTTOU。
TASK_TRACED 136
進程運行被調試器(debugger)打斷。
EXIT_ZOMBIE 16
進程已終止運行,但父進程還沒有調用wait系統調用。do_exit已經被調用,因此該進程所申請的資源都已經被釋放。
EXIT_DEAD 32
進程(描述符)可以隨時被內核銷燬。
只有處於TASK_RUNNING狀態的進程纔會被放入運行隊列(每處理器一個)。當進程被掛起時,將被放入某個等待隊列(e.g. by prepare_to_wait)並從運行隊列移除(by deactivate_task called by schedule),以便條件滿足時將其喚醒。喚醒時,進程重又被加入運行隊列(by activate_task)並從等待隊列移除(e.g. by finish_wait)。
參考文獻:
Understanding the Linux Kernel, 3rd Edition