程序是已啟動的可執行程式的執行中例項。
/proc目錄下以數字為名的目錄,每乙個目錄代表乙個程序,儲存著程序的屬性資訊。每乙個程序的pid是唯一的,就算程序退出了,其它程序也不會占用其pid。
1.1程序的組成部分
已分配記憶體的位址空間
安全屬性,包括所有權憑據和特權
程式**的乙個或多個執行執行緒
程序狀態
程序的環境
本地和全域性變數
當前排程上下文
分配的系統資源,如檔案描述符和網路埠
1.2程序的環境
本地和全域性變數
當前排程上下文
分配的系統資源,如檔案描述符和網路埠
1.3程序的分類
前台程序: 與終端相關的程序,通過終端啟動的程序
注意: 也可把在前台啟動的程序送往後台,以守護模式執行
守護程序:daemon,與終端無關的程序(如核心),在系統引導過程中啟動的程序
excuting *//執行態*
ready *//就緒態,也可以稱作睡眠態*
uninterruptible sleep *//不可中斷的睡眠。不可隨時喚醒,只有當io資源載入成功後才能喚醒*
interruptible sleep *//可中斷的睡眠。可隨時喚醒*
zombie *//殭屍程序。正常執行結束了,但是不釋放佔據的記憶體*
stopped *//停止態,暫停於記憶體中,但不會被排程,除非手動啟動之*
<0-139>:數字越小,優先順序越高!
<0-99>:實時優先順序,核心調整
<100-139>:靜態優先順序,使用者可控制
ps(process state)命令用於列出當前的程序。可以顯示詳細的程序資訊
*//常用選項*:
a *//顯示所有與終端有關的程序*
u *//顯示程序是由哪個使用者啟動的*
x *//顯示所有與終端無關的程序*
-e *//顯示所有程序,與-a效果相同*
-l *//以長格式顯示*
-f *//顯示更詳細的完整格式的程序資訊*
-f *//顯示更詳細的完整格式的程序資訊*
-h *//以程序層級格式顯示程序相關資訊*
-o *//根據自己的需要選擇要顯示的字段*
[root@localhost ~]# ps -o pid,comm,ni *//表示只顯示程序號,命令,nice值三個字段*
pid command ni
8828 bash 0
9844 ps 0
*//aux結果解析:*
vsz *//virtual memory size,虛擬記憶體集*
rss *//resident size,常駐記憶體集*
stat *//程序狀態*
time *//執行時的累積時長*
*//ps命令結果解析:*
ni *//nice值*
pri *//優先順序*
psr *//程序執行在哪個cpu核心上*
rtptrio *//實時優先順序*
c *//執行的cpu編號*
stime *//程序的啟動時間*
vsz *//virtual memory size,虛擬記憶體集*
rss *//resident size,常駐記憶體集*
stat *//程序狀態*
time *//執行時的累積時長*
vmstat虛擬記憶體狀態檢視命令
[root@localhost ~]# vmstat 1000
procs:
r(running) *//表示等待執行的佇列長度,也即等待執行的程序的個數*
b(block) *//表示阻塞佇列長度,也即處於不可中斷睡眠態的程序個數*
memory:
swpd *//交換記憶體的使用總量*
free *//空閒物理記憶體總量*
buffer *//用於buffer的記憶體總量*
cache *//用於cache的記憶體總量*
swap:
si(swap in) *//表示從物理記憶體有多少頁面換進swap,也即資料進入swap的資料速率(kb/s)*
so(swap out) *//表示從swap有多少頁面換進物理記憶體,也即資料離開swap的資料速率(kb/s)*
io: bi(block in) *//表示磁碟塊有多少個被調入記憶體中,也即從塊裝置讀入資料到系統的速率(kb/s)*
bo(block out) *//表示有多少個磁碟塊從記憶體中被同步到硬碟上去了,也即儲存資料至塊裝置的速率(kb/s)*
system:
in( interrupts) *//表示中斷的個數,也即中斷速率(kb/s)*
cs(context switch) *//表示上下文切換的次數,也即程序切換速率(kb/s)*
cpu:
us *//表示使用者空間*
sy *//表示核心空間*
id *//表示空閒百分比*
wa *//表示等待io完成所佔據的時間百分比*
st *//表示steal,被虛擬化技術偷走的時間(比如執行虛擬機器)*
*//在命令後跟上&符號可以生成乙個後台作業*
[root@localhost ~]*# sleep 1000 &*
[1] 1819
*//jobs命令用於顯示當前所有的後台作業*
[root@localhost ~]*# jobs*
[1]+ running sleep 1000 &
*//fg命令用於將後台作業調至前台執行*
[root@localhost ~]# *fg*
*//當只有乙個後台作業時,直接使用fg命令,不跟任何引數即可將後台作業調至前台執行,但是當有多個作業時則必須跟上%+作業號,也就是上面命令執行結果中以括起來的數字。*
[root@localhost ~]*# jobs*
[1]- running sleep 1000 &
[2]+ running sleep 500 &
[root@localhost ~]*# fg %1*
*//使用ctrl+z可將前台程序傳送到後台,此時作業將處於停止狀態*
[root@localhost ~]*# fg %1*
sleep 1000
^z[1]+ stopped sleep 1000
*//使用bg命令+作業號可使後台已停止的作業重新執行*
[root@localhost ~]*# bg %1*
[1]+ sleep 1000 &
[root@localhost ~]*# jobs*
[1]- running sleep 1000 &
[2]+ running sleep 500 &
*//kill加上作業號可以手動殺死指定作業*
[root@localhost ~]*# jobs*
[1]- running sleep 1000 &
[2]+ running sleep 500 &
[root@localhost ~]*# kill %1*
[1]- terminated sleep 1000
[root@localhost ~]*# jobs*
[2]+ running sleep 500 &
//jobs命令的結果中
+ //命令將預設操作的作業
- //命令將第二個預設操作的作業
Linux程序管理(1)
程序是執行期間的程式及其它所包含的資源的總稱。程序通過 fork 系統呼叫產生,該系統呼叫通過複製乙個現有程序來建立乙個全新的程序。fork 呼叫一次返回兩次 一次回到父程序 一次回到新建立的子程序。程序描述符及任務結構 核心把程序放在 task list 的雙向迴圈鍊錶中,其中每一項都是乙個 ta...
1 程序管理
程序描述符獲取 通過thread union,使程序核心態堆疊和thread info緊密結合在一起。檔案include linux sched.h當中,有thread union的定義 union thread union 之所以將thread info結構稱之為小型的程序描述符,是因為在這個結構...
程序管理(1)
程序是處於執行期的程式,程序包括 段,資料段,還有pcb 程序控制塊 執行緒實在程序中活動的物件,核心排程的物件是執行緒,而不是程序 注意 linux核心通常把程序叫做任務核心把程序的列表存放在任務佇列中 雙向迴圈鍊錶 鍊錶中的每一項型別都是task struct 稱為程序描述符 程序描述符包含乙個...