進程是一個動態的實體,所以他是有生命的。從創建到消亡,是一個進程的整個生命周期。在這個周期中,進程可能會經歷各種不同的狀態。一般來說,所有進程都要經歷以下的3個狀態:
- 就緒態。指進程已經獲得所有所需的其他資源,正在申請處理處理器資源,準備開始執行。這種情況下,稱進程處于就緒態。
- 阻塞態。指進程因為需要等待所需資源而放棄處理器,或者進程本不擁有處理器,且其他資源也沒有滿足,從而即使得到處理器也不能開始運行。這種情況下,進程處于阻塞態。阻塞狀態也稱休眠狀態或者等待狀態。
- 運行態。進程得到了處理器,并不需要等待其他任何資源,正在執行的狀態,稱之為運行態。只有在運行態時,進程才可以使用所申請到的資源。
在Linux系統中,將各種狀態進行了重新組織,由此得到了Linux進程的幾個狀態:
- RUNNING:正在運行或者在就緒隊列中等待運行的進程。也就是上面提到的運行態和就緒態進程的綜合。一個進程處于RUNNING狀態,并不代表他一定在被執行。由于在多任務系統中,各個就緒進程需要并發執行,所以在某個特定時刻,這些處于RUNNING狀態的進程之中,只有一個能得到處理器,而其他進程必須在一個就緒隊列中等待。即使是在多處理器的系統中,Linux也只能同時讓一個處理器執行任務。
- UNINTERRUPTABLE:不可中斷阻塞狀態。處于這種狀態的進程正在等待隊列中,當資源有效時,可由操作系統進行喚醒,否則,將一直處于等待狀態。
- INTERRUPTABLE:可中斷阻塞狀態。與不可中斷阻塞狀態一樣,處于這種狀態的進程在等待隊列中,當資源有效時,可以有操作系統進行喚醒。與不可中斷阻塞狀態有所區別的是,處于此狀態中的進程亦可被其他進程的信號喚醒。
- STOPPED:掛起狀態。進程被暫停,需要通過其它進程的信號才能被喚醒。導致這種狀態的原因有兩種。其一是受到相關信號(SIGSTOP,SIGSTP,SIGTTIN或SIGTTOU)的反應。其二是受到父進程ptrace調用的控制,而暫時將處理器交給控制進程。
- ZOMBIE:僵尸狀態。表示進程結束但尚未消亡的一種狀態。此時進程已經結束運行并釋放掉大部分資源,但尚未釋放進程控制塊。

轉自:
posted on 2010-01-11 22:01
chatler 閱讀(418)
評論(0) 編輯 收藏 引用 所屬分類:
Linux_Coding