Linux 程序狀態

2021-09-28 19:41:01 字數 2346 閱讀 9652

為了弄明白正在執行的程序是什麼意思,我們需要知道程序的不同狀態。乙個程序可以有幾個狀態(在

linux核心裡,程序有時候也叫做任務)。

檢視程序狀態命令:ps aux 或 ps axj

執行 ps aux 結果:

執行 ps axj 結果:

下面是程序的狀態在kernel源**裡定義:

/*

* the task state array is a strange "bitmap" of

* reasons to sleep. thus "running" is zero, and

* you can test for combinations of others with

* ****** bit tests.

*/static

const

char

*const task_state_array=

;

r執行狀態(running): 並不意味著程序一定在執行中,它表明程序要麼是在執行中要麼在執行佇列裡。打個比方,今天中午你正在食堂排隊打飯,你朋友打**問你在幹啥呢,你說在吃飯呢;你打了飯後開始吃飯,你的另乙個朋友也打**問你在幹啥呢,你也說在吃飯呢。

s睡眠狀態(sleeping): 意味著程序在等待事件完成(這裡的睡眠有時候也叫做可中斷睡眠

(interruptible sleep))。

d磁碟休眠狀態(disk sleep)有時候也叫不可中斷睡眠狀態(uninterruptible sleep),在這個狀態的程序通常會等待io的結束。該程序不可被中斷,當等待的io事件完成後才恢復。

t停止狀態(stopped): 可以通過傳送 sigstop 訊號給程序來停止(t)程序。這個被暫停的程序可以通過傳送 sigcont 訊號讓程序繼續執行。

x死亡狀態(dead):這個狀態只是乙個返回狀態,你不會在任務列表裡看到這個狀態。

z殭屍程序(zombie)

建立乙個維持30秒的僵死程序例子:

在乙個終端執行下列程式:

1 #include 

2 #include

3 #include 45

intmain()

612else

if(id >0)

16else

21return0;

22}

在另乙個終端下輸入以下**指令碼並執行(zombieprocess為第一步中的程式名):

while :; do ps aux | grep zombieprocess | grep -v grep; sleep 1; echo 「####################」; done

結果:

程序的退出狀態必須被維持下去,因為他要告訴關心它的程序(父程序)交給它的任務,它辦的怎麼樣了。可父程序如果一直不讀取,那子程序就一直處於z狀態?是的!

維護退出狀態本身就是要用資料維護,也屬於程序基本資訊,所以儲存在task_struct(pcb)中,換句話說,z狀態一直不退出,pcb一直都要維護?是的!

那乙個父程序建立了很多子程序,就是不**,是不是就會造成記憶體資源的浪費?是的!因為資料結構物件本身就要占用記憶體,想想c中定義乙個結構體變數(物件),是要在記憶體的某個位置進行開闢空間!

記憶體洩漏!!!

無法用kill命令殺死僵死程序,因為不能殺死乙個已經死去的程序。

孤兒程序

建立乙個孤兒程序例子:

在乙個終端執行下列程式:

1 #include 

2 #include

3 #include 45

intmain()

612else

if(id ==0)

else

20return0;

21}

在另乙個終端下輸入以下**指令碼並執行(orphonprocess為第一步中的程式名):

while :; do ps aux | grep orphanprocess | grep -v grep; sleep 1; echo 「####################」; done

執行結果:

linux 程序 狀態

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

linux程序狀態

1.r task running,正在執行或者處於就緒狀態 很多作業系統教科書將正在cpu上執行的程序定義為running狀態 而將可執行但是尚未被排程執行的程序定義為ready狀態,這兩種狀態在linux下統一為 task running狀態。例子 ps aux 會看到ps這個程式命令的執行狀態是...

Linux程序狀態

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