Linux進程狀態

在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

內核的等待隊列

http://lxr.oss.org.cn/source/include/linux/sched.h

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章