linux 程序管理

2022-05-06 14:30:09 字數 1442 閱讀 2471

1.1程序概述

程序就是處於執行期的程式,但程序不僅僅侷限於一段可執行**。通常還包括其他資源(例如開啟的檔案,內部資料,處理器狀態,資料段等等)。

在現代作業系統中,程序提供了兩種虛擬機制:虛擬處理器(程序排程)和虛擬記憶體(虛擬記憶體管理)。各個執行緒之間可以共享虛擬記憶體,但是擁有各自的虛擬處理器。

注:在linux中程序的另乙個名字是任務(task)。

1.2程序描述符及任務結構

核心把程序的列表存放在叫做任務佇列(task list)的迴圈鍊錶中。鍊錶中的每一項都是型別為task_sruct的型別,稱為程序描述符。它包含了程序的所有資訊(例如它開啟的檔案、程序的位址空間、掛起的訊號、程序的狀態。。。。)。

1.2.1

分配程序描述符

linux通過slab分配器分配task_struct結構這樣能達到物件的復用和著色。在2.6以前的核心中,各個程序的task_stuct結構都是放在核心棧的尾端,現在由slab分配task_struct,現在建立新的結構thread_info,定義如下:

struct  thread_info

1.2.2程序狀態

程序的狀態為以下五種狀態之一:

task_running——程序是可執行的:它或者正在執行,或者在執行佇列中等待執行。

task_interruptible——程序正在睡醒,等待某些條件達成,達成後程序的狀態設定為執行。

task_uninterruptible——程序接收到訊號也不會投入執行或喚醒。

_task_traced——被其他程序跟蹤的程序

_task_stopped——程序停止執行,程序沒有投入執行也不能執行

1.2.3設定當前程序狀態

核心經常需要調整某個程序狀態。這時最好用set_task_state(task,state)函式:

設定當前程序狀態set_current_state(state)。

1.2.4程序上下文

可執行**是程序的重要組成部分,這些**一般在使用者空間執行。當乙個程式執行系統呼叫或者觸發了某個異常,它就陷入核心空間。此時我們稱核心代表程序執行並處於程序上下文中(在中斷上下文中,系統不代表程序執行,而是執行乙個中斷處理程式)。在核心退出時,程式恢復在使用者空間會繼續執行。

異常和系統呼叫時系統明確定義的介面,只有通過這兩個介面才可以進入核心執行。

1.2.6程序家族樹

在linux中,所有程序都是pid為1的程序的後代,系統中的每乙個程序必有乙個父程序,相應的,每個程序也擁有零個或者多個子程序,擁有乙個父程序的程序稱為兄弟。程序間的關係在程序描述符中描述。每個task_struct 都有乙個指向父程序的task_struct,叫做parent指標。還包含乙個稱為children的子程序鍊錶。

struct   task_struct    *my_parent=current->parent

1.3程序建立

linux把程序的產生分成兩步:fork()和exec(),首先

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值,數值大,表示較少...