Linux程序管理1

2021-10-10 10:03:52 字數 4789 閱讀 5576

程序是已啟動的可執行程式的執行中例項。

/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 稱為程序描述符 程序描述符包含乙個...