進程擁有以下幾種狀態:就緒/運行狀態、等待狀態(可以被中斷打斷)、等待狀態(不可以被中斷打斷)、停止狀態和僵死狀態.
TASK_RUNNING: 正在運行或處於就緒狀態:就緒狀態是指進程申請到了CPU以外的其他所有資源,正所謂:萬事俱備,只欠東風.提醒:一般的操作系統教科書將正在CPU上執 行的進程定義為RUNNING狀態、而將可執行但是尚未被調度執行的進程定義為READY狀態,這兩種狀態在Linux下統一為 TASK_RUNNING狀態.
TASK_INTERRUPTIBLE: 處於等待隊伍中,等待資源有效時喚醒(比如等待鍵盤輸入、socket連接、信號等等),但可以被中斷喚醒.一般情況下,進程列表中的絕大多數進程都處於 TASK_INTERRUPTIBLE狀態.畢竟皇帝只有一個(單個CPU時),后宮佳麗幾千;如果不是絕大多數進程都在睡眠,CPU又怎么響應得過來.
TASK_UNINTERRUPTIBLE:處於等待隊伍中,等待資源有效時喚醒(比如等待鍵盤輸入、socket連接、信號等等),但不可以被中斷喚醒.
TASK_ZOMBIE:僵死狀態,進程資源用戶空間被釋放,但內核中的進程PCB並沒有釋放,等待父進程回收.
TASK_STOPPED:進程被外部程序暫停(如收到SIGSTOP信號,進程會進入到TASK_STOPPED狀態),當再次允許時繼續執行(進程收到SIGCONT信號,進入TASK_RUNNING狀態),因此處於這一狀態的進程可以被喚醒.
用戶級進程之間的狀態切換關系如圖2所示.

圖2 用戶進程狀態切換圖
http://blog.csdn.net/u010006102/article/details/39957967