linux 程序管理

2021-07-22 09:59:57 字數 3592 閱讀 4412

本篇部落格,純屬博主自初學階段對知識的系統複習 ,如有錯誤還望指出,感謝!

一 、 比較程式與程序

程式是靜態儲存的** , 程序是動態執行的** ;程式是檔案 , 程序是正在執行的程式(程式的乙個執行例項)

通過查閱資料,對程序在進一步了解: 

從核心觀點來看,程序是擔當分配系統資源的實體。

程序是兩個基本元素是 程式** 和 **相關聯的資料集

程序是⼀種動態描述,但是並不代表所有的程序都在運⾏。(程序在記憶體中因策略或排程需求,會處於各種狀態)

二 、 如何檢視程序資訊

使用ps命令檢視系統程序

顯示所用程序 :

ps aux | less

-a:顯示所有程序

a:顯示終端中包括其它使用者的所有程序

x:顯示無控制終端的程序

基本使用舉例

任務1:檢視系統中的每個程序。

# ps -a

# ps -e

任務2:檢視非root執行的程序

# ps -u root -u root -n
任務3:檢視使用者vivek執行的程序

# ps -u vivek

當然還有其他命令:top  動態顯示程式的程序

繼續理解深入可參考:

三 、 程序描述

⼴義上,所有的程序資訊被放在⼀個叫做程序控制塊的資料結構中,可以理解為程序屬性的集合

每乙個程序在核心都有乙個程序控制塊(pcb)來維護程序相關資訊。linux的程序控制塊就是task_struct結構體

關於task_struct可以檢視

程序都以 task_struct 鍊錶的形式存在核心

四 、 程序位置

c程式在執行過程中 , 經歷 預處理、編譯、彙編、鏈結 四個過程。 程式是怎麼轉化成為程序的呢?

程式-->程序:1 、核心將程式讀入記憶體,為程式 分配你記憶體空間

2、 核心儲存程序的pid及相應的狀態資訊 , 把程式 放到執行佇列中等待執行(程式轉化成為程序就      可 被作業系統排程執行了)

在這個過程中核心是如何存放可執行程式呢?

這就要談到程序的記憶體映像,程序的記憶體映像就是核心在記憶體中如何存放可執行程式檔案。具體如下圖:

程序記憶體映像的位置依賴於使用記憶體的解決的方案。

五 、 程序的建立

在linux中,程序的建立主要有 fork 、 vfork 、 clone 三種方式。

fork

fork呼叫建立乙個新的程序。新的程序或者說子程序是呼叫程序的或者說父程序的副本。

使用舉例: 

#includepid_t fork(void);
如果fork執行成功,就向父程序返回子程序的pid,並向子程序返回0 ; 如果建立失敗,返回-1   。也就是fork有兩個返回值

具體過程如圖:

六 、 程序狀態linux是乙個多使用者,多工的系統,可以同時執行多個使用者的多個程式,就必然會產生很多的程序,而每個程序會有不同的狀態。

程序的各個狀態如圖:

這裡對s、d、z狀態著重說明。

s(sleep):睡眠狀態 , 是淺睡眠(可中斷的睡眠)

d(disk sleep):睡眠狀態 ,是深度睡眠(不可中斷睡眠)

z(zombie):殭屍狀態 ,父程序沒退出而子程序退出時 子程序 的狀態(子程序已死,父程序還活著)。

下面實戰,了解殭屍狀態

過了一會之後 ,我們發現子程序不見了 , 那麼誰來給它收屍呢?

沒有他人,就是系統(父程序死掉之後,其所有子程序過繼給 init 程序,init 程序成為該殭屍程序的新程序,init 程序會周期性地去呼叫 wait 系統呼叫來清除它的殭屍孩子。因此,你會發現上面例子中父程序死掉之後,殭屍程序也跟著消失,其實是 init 程序為其收屍的!)

具體可參考:

七 、 程序的優先順序

程序cpu資源分配就是指程序的優先權( priority)。優先權高的程序有優先執行權利。

上面講的,檢視系統程序:

pri的值越小, 那麼它的優先順序就越高,就會越快被執行。加入nice值後的pri::pri(new) = pri(old) + nice

(當nice值為負值的時候,那麼該程式將會優先順序值將變小,即其優先順序會變高,則其越快被執行)

經過測驗得到:

nice最小是 -20 ,最大是 19

pri最小是 60 , 最大是 99 

那麼如何修改nice值呢?

有nice,renice兩條命令:

參考:對於輸入命令後系統做的一些動作,(純屬個人理解)如圖:

參考:最後,能看到這裡的讀者,一方面肯定了我的成果,另一方面你也是勤學的人,那我就在講一點:

殭屍程序:乙個子程序在其父程序沒有呼叫wait()或waitpid()的情況下退出。這個子程序就是殭屍程序。如果其父程序還存在而一直不呼叫wait,則該殭屍程序將無法**,等到其父程序退出後該程序將被init**。

孤兒程序:乙個父程序退出,而它的乙個或多個子程序還在執行,那麼那些子程序將成為孤兒程序。孤兒程序將被init程序(程序號為1)所收養,並由init程序對它們完成狀態收集工作。 

殭屍程序將會導致資源浪費,而孤兒則不會。

LINUX程序管理

1.程序是什麼?乙個程序就是出於執行期的程式,包括 可執行程式 段 開啟的檔案,掛起的訊號,核心內部資料,處理器狀態,位址空間,乙個或多個執行執行緒,當然還包括用來存放全域性變數的資料段,等等.2.什麼是執行緒?它和程序的關係是什麼樣的?執行緒在linux中具體是怎麼樣實現的?是在程序中活動的物件,...

linux程序管理

程序的監控 使用ps aux 檢視當前所有程序。可以使用top檢視當前程序自動更新列表,在top中m 按記憶體大小排列,p 按cpu佔用率排列 終止和管理程序 程序之間通過訊號來進行通訊 top和kill都用於向程序傳送訊號。kill l顯示訊號編號表。kill 9 pid kill pid 向pi...

Linux 程序管理

1.linux程序管理工具,包括ps pgrep top kill killall pkill 等 常用 ps aux 或lax輸出的解釋 user 程序的屬主 pid 程序的id ppid 父程序 cpu 程序占用的cpu百分比 mem 占用記憶體的百分比 ni 程序的nice值,數值大,表示較少...