linux程序狀態

2021-06-08 12:05:05 字數 2637 閱讀 6074

1.r:task_running,正在執行或者處於就緒狀態

很多作業系統教科書將正在cpu上執行的程序定義為running狀態、而將可執行但是尚未被排程執行的程序定義為ready狀態,這兩種狀態在linux下統一為 task_running狀態。

例子:ps -aux

//會看到ps這個程式命令的執行狀態是r,+一會再說

2.stask_interruptible,可中斷的睡眠狀態

程序因為等待某事件發生而阻塞睡眠,比如:等待socket連線、等待訊號量、sleep、pause。我理解就是程式設計師司空見慣的阻塞等待。

3.dtask_uninterruptible,不可中斷的睡眠狀態

程序處於睡眠狀態,但是此刻程序是不可中斷的,即程序不響應非同步訊號。task_uninterruptible狀態存在的意義就在於,核心的某些處理流程是不能被打斷的。

例子:

#include #include int main()

return 0;

}

執行 ps -aux 檢視父程序的狀態即為d。此時在終端對父程序傳送sigkill訊號(kill ***)不能終止程序。

4.t

task_stoppedortask_traced,暫停狀態或跟蹤狀態

(1)向程序傳送乙個sigstop、sigtstp、sigttin、sigttou訊號,它就會因響應該訊號而進入task_stopped狀態。

除非該程序本身處於task_uninterruptible狀態而不響應訊號,sigstop與sigkill訊號一樣,是強制的,不允許使用者程序通過signal系列的系統呼叫重新設定對應的訊號處理函式。

向程序傳送乙個sigcont訊號,可以讓其從task_stopped狀態恢復到task_running狀態。

(2)當程序正在被跟蹤時,它處於task_traced這個特殊的狀態。「正在被跟蹤」指的是程序暫停下來,等待跟蹤它的程序對它進行操作。比如在gdb中對被跟蹤的程序下乙個斷點,程序在斷點處停下來的時候就處於task_traced狀態。而在其他時候,被跟蹤的程序還是處於前面提到的那些狀態。

(3)對於程序本身來說,task_stopped和task_traced狀態很類似,都是表示程序暫停下來。

而task_traced狀態相當於在task_stopped之上多了一層保護,處於task_traced狀態的程序不能響應sigcont訊號而被喚醒。只能等到除錯程序通過ptrace系統呼叫執行ptrace_cont、ptrace_detach等操作(通過ptrace系統呼叫的引數指定操作),或除錯程序退出,被除錯的程序才能恢復task_running狀態。

例子:

#include #include int main()

執行 gcc main.c -o main,執行./main;

ps -aux 檢視程序的 stat 是s;

終端傳送訊號 kill -sigstop ***(***是程序id號),再 ps -aux 檢視程序stat是t;

終端傳送訊號 kill -sigcont ***,再 ps -aux 檢視程序stat恢復s。

執行gcc -g main.c -o main,然後gdb main;

ps -axu檢視對應程序id,stat是t。

5.ztask_dead - exit_zombie,退出狀態,程序成為殭屍程序

子程序已經結束,而父程序還沒處理子程序退出時(如:wait子程序,處理sigchld訊號),子程序程序的狀態。

例子:

#include #include int main()

return 0;

}

終端 ps -aux 檢視子程序的stat是z。

6.ps中的stat的其他狀態
w   正在換頁(2.6.核心之前有效)

x   死程序 (未開啟)

n   低優先順序(nice to other users)

l   頁面鎖定在記憶體(實時和定製的io)

s   乙個資訊頭

l   多執行緒(使用 clone_thread,像nptl的pthreads的那樣)

+   在前台程序組

linux 程序 狀態

程序在執行過程中會根據環境來改變state。linux程序有以下狀態 running 程序處於執行 它是系統的當前程序 或者準備執行狀態 它在等待系統將cpu分配給它 waiting 程序在等待乙個事件或者資源。linux將等待程序分成兩類 可中斷與不可中斷。可中斷等待程序可以被訊號中斷 不可中斷等...

Linux程序狀態

在linux中,常見的程序狀態有以下幾種 task running 0 程序正在執行或者等待被排程執行 task interruptible 1 程序由於等待某個系統資源或者某個事件而處於掛起 睡眠 狀態。對其傳送訊號 signal 可以將其喚醒 進入task running狀態 task unin...

Linux程序狀態

2 程序狀態 s state o 程序正在處理器執行,這個狀態從來木見過.s 休眠狀態 sleeping r 等待執行 runable r running or runnable on run queue 程序處於執行或就緒狀態 i 空閒狀態 idle z 殭屍狀態 zombie t 跟蹤狀態 tr...