1. 程式人生 > >進程的狀態

進程的狀態

進程 狀態 並發 編程 基礎

在Linux操作系統中,每個進程在每個時刻都是有狀態的。可能的狀態共有6個,分別是可運行狀態、可中斷的睡眠狀態、不可中斷的睡眠狀態、暫停狀態或跟蹤狀態、僵屍狀態和退出狀態。

可運行狀態(TASK_RUNNING, R)

如果一個進程處在該狀態,那麽說明它立刻要或正在CPU上運行。不過運行的時機是不確定的,由進程調度器來決定。

可中斷的睡眠狀態(TASK_INTERRUPTIBLE, S)

當進程正在等待某個事件到來時,會進入此狀態。這樣的進程會被放入對應事件的等待隊列中。當事件發生時,對應的等待隊列中的一個或多個進程就會被喚醒。

不可中斷的睡眠狀態(TASK_UNINTERRUPTIBLE, D)

此種狀態與S的唯一區別就是它不可被打斷。處在此種狀態的進程不會對任何信號作出回應。發送給此狀態的進程的信號直到它從該狀態轉出去才會被傳遞出去。處於此狀態的進程通常是在等待一個特殊的事件。

暫停狀態或跟蹤狀態(TASK_STOPPED或TASK_TRACED, T)

向進程發送SIGTOP信號,就會使該進程轉入暫停狀態,除非該進程正處於不可中斷的睡眠狀態。向正處於暫停狀態的進程發送SIGCONT信號,會使該進程轉向可運行狀態。處於該狀態的進程會暫停,並等待另一個進程對它進行操作。

僵屍狀態(TASK_DEAD-EXIT_ZOMBIE, Z)

處於此狀態的進程即將結束運行,該進程占用的絕大多數資源都已經被回收,不過還有一些信息未刪除,比如退出碼以及一些統計信息。

退出狀態(TASK_DEAD-EXIT_DEAD, X)

在進程退出的過程中,有可能連退出碼和統計信息都不需要保留。處於退出狀態的進程會立即被幹凈利落地結束掉,它占用的系統資源也會被操作系統自動回收。

進程的狀態