linux中程序的狀態

2021-10-24 08:20:21 字數 1373 閱讀 9775

1.使用命令 top -c 來檢視程序狀態:

[redhat@localhost ~]$ top -c 

r工作中的程序

s可中斷的睡眠狀態

i空閒狀態(idle)

o程序正在處理器執行

b程序正在等待更多的記憶體頁

d不可中斷的睡眠狀態

t暫停狀態或跟蹤狀態

x出狀態,程序即將被銷毀

z殭屍程序

1、task_running:(r)

程序當前正在執行,或者正在執行佇列中等待排程。只有在該狀態的程序才可能在cpu上執行,同一時刻可能有多個程序處於可執行狀態。

2、task_interruptible:(s)

程序處於睡眠狀態,處於這個狀態的程序因為等待某事件的發生(比如等待socket連線、等待訊號量),而被掛起。當這些事件發生時,對應的等待佇列中的乙個或多個程序將被喚醒。一般情況下,程序列表中的絕大多數程序都處於task_interruptible狀態。程序可以被訊號中斷。接收到訊號或被顯式的喚醒呼叫喚醒之後,程序將轉變為 task_running 狀態。

3、task_uninterruptible:(d)

不可中斷的睡眠狀態,此程序狀態類似於 task_interruptible,只是它不會處理訊號。不可中斷,指的是程序不響應非同步訊號,無法用kill命令關閉處於task_uninterruptible狀態的程序。中斷處於這種狀態的程序是不合適的,因為它可能正在完成某些重要的任務。 當它所等待的事件發生時,程序將被顯式的喚醒呼叫喚醒。可處理signal, 有延遲

4、task_stopped:

程序已中止執行,它沒有執行,並且不能執行。接收到 sigstop 和 sigtstp 等訊號時,程序將進入這種狀態。接收到 sigcont 訊號之後,程序將再次變得可執行。

5、task_traced:(t)

正被除錯程式等其他程序監控時,程序將進入這種狀態。

6、exit_zombie:(z)

程序已終止,它正等待其父程序收集關於它的一些統計資訊。不可被kill, 即不響應任務訊號, 無法用sigkill殺死

7、exit_dead:(x)

最終狀態(正如其名)。將程序從系統中刪除時,它將進入此狀態,因為其父程序已經通過 wait4(

) 或 waitpid(

) 呼叫收集了所有統計資訊。exit_dead狀態是非常短暫的,幾乎不可能通過ps命令捕捉到。

8、task_killable:

linux® kernel 2.6.25 引入了這種程序狀態,用於將程序置為睡眠狀態,它可以替代有效但可能無法終止的 task_uninterruptible 程序狀態,以及易於喚醒但更加安全的 task_interruptible 程序狀態

Linux中程序的狀態與轉換

程序在其生命週期內,由於系統中各程序之間的相互制約關係及系統的執行環境的變化,使得程序的狀態也在不斷的發生變化,即乙個程序會經歷若干種不同的狀態。通常程序有以下五種狀態,前三種是程序的基本狀態。1 執行狀態 程序正在處理機上執行。在單處理機環境下,每一時刻最多只有乙個程序處於執行狀態。2 就緒狀態 ...

Linux中程序有哪幾種狀態

只有在該狀態的程序才可能在cpu上執行。而同一時刻可能有多個程序處於可執行狀態,這些程序的task struct結構 程序控制塊 被放入對應cpu的可執行佇列中 乙個程序最多只能出現在乙個cpu的可執行佇列中 程序排程器的任務就是從各個cpu的可執行佇列中分別選擇乙個程序在該cpu上執行。很多作業系...

linux系統中程序的建立

linux系統的程序建立時區別於其他的系統的,它並沒有提供spawn機制。而是把乙個程序的建立分成了兩步 fork和exec 先建立乙個程序,再讓子程序執行新的程式。首先系統呼叫fork 函式,若呼叫成功則產生乙個新的程序,值的一提的是該函式會產生兩個返回值。當父程序呼叫的時候返回0,子程序呼叫的時...