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