linux程序管理(一)

2021-09-26 20:01:50 字數 4634 閱讀 9466

程式是為了完成某種任務而設計的軟體,比如openoffice是程式。什麼是程序呢?程序就是執行中的程式。

乙個執行著的程式,可能有多個程序。 比如自學it網所用的www伺服器是apache伺服器,當管理員啟動服務後,可能會有好多人來訪問,也就是說許多使用者來同時請求httpd服務,apache伺服器將會建立有多個httpd程序來對其進行服務。

程序一般分為互動程序、批處理程序和守護程序三類。

值得一提的是守護程序總是活躍的,一般是後台執行,守護程序一般是由系統在開機時通過指令碼自動啟用啟動或超級管理使用者root來啟動。比如在redhat中,我們可以定義httpd 伺服器的啟動指令碼的執行級別,此檔案位於/etc/init.d目錄下,檔名是httpd,/etc/init.d/httpd 就是httpd伺服器的守護程式,當把它的執行級別設定為3和5時,當系統啟動時,它會跟著啟動。

程序id(pid):是唯一的數值,用來區分程序;

父程序和父程序的id(ppid);

啟動程序的使用者id(uid)和所歸屬的組(gid);

程序狀態:狀態分為執行r、休眠s、殭屍z;

程序執行的優先順序;

程序所連線的終端名;

程序資源占用:比如占用資源大小(記憶體、cpu佔用量);

他們的關係是管理和被管理的關係,當父程序終止時,子程序也隨之而終止。但子程序終止,父程序並不一定終止。比如httpd伺服器執行時,我們可以殺掉其子程序,父程序並不會因為子程序的終止而終止。

在程序管理中,當我們發現占用資源過多,或無法控制的程序時,應該殺死它,以保護系統的穩定安全執行;

對於linux程序的管理,是通過程序管理工具實現的,比如ps、kill、pgrep等工具;

ps 為我們提供了程序的一次性的檢視,它所提供的檢視結果並不動態連續的;如果想對程序時間監控,應該用top工具;

ps 的引數說明

ps 提供了很多的選項引數,常用的有以下幾個;

l  長格式輸出;

u 按使用者名稱和啟動時間的順序來顯示程序;

j 用任務格式來顯示程序;

f 用樹形格式來顯示程序;

a 顯示所有使用者的所有程序(包括其它使用者);

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

r 顯示執行中的程序;

ww 避免詳細引數被截斷;

我們常用的選項是組合是aux 或lax,還有引數f的應用;

user    程序的屬主;

pid 程序的id;

ppid 父程序;

%cpu 程序占用的cpu百分比;

%mem 占用記憶體的百分比;

pri 代表這個程式『可被執行的優先順序』

ni 程序的nice值,數值大,表示較少占用cpu時間;

vsz 程序虛擬大小;

rss 駐留中頁的數量;

tty 終端id

stat 程序狀態

d 不間斷的睡眠(usually io)

r 正在執行中在佇列中可過行的;

s 處於休眠狀態;

t 停止或被追蹤;

w 進入記憶體交換(從核心2.6開始無效);

x 死掉的程序(從來沒見過);

z 殭屍程序;

《優先順序高的程序

n 優先順序較低的程序

l 有些頁被鎖進記憶體;

s 程序的領導者(在它之下有子程序);

l

is multi-threaded (using clone_thread, like nptl pthreads do

)+位於後台的程序組;

wchan 正在等待的程序資源;

start 啟動程序的時間;

time 程序消耗cpu的時間;

command 命令的名稱和引數;

例項一:ps aux 最常用

[root@localhost ~]# ps -aux |more

可以用 |管道和 more 連線起來分頁檢視

[root@localhost ~]# ps -aux >ps001.txt

[root@localhost ~]# more ps001.txt

這裡是把所有程序顯示出來,並輸出到ps001.txt檔案,然後再通過more 來分頁檢視

例項二:和grep 結合,提取指定程式的程序;

pgrep 是通過程式的名字來查詢程序的工具,一般是用來判斷程式是否正在執行。在伺服器的配置和管理中,這個工具常被應用,簡單明瞭;

用法:

#pgrep 引數選項   程式名

常用引數

-l  列出程式名和程序id;

-o 程序起始的id;

-n 程序終止的id;

舉例:

終止乙個程序或終止乙個正在執行的程式,一般是通過 kill 、killall、pkill、xkill 等進行。比如乙個程式已經死掉,但又不能退出,這時就應該考慮應用這些工具。

另外應用的場合就是在伺服器管理中,在不涉及資料庫伺服器程式的父程序的停止執行,也可以用這些工具來終止。為什麼資料庫伺服器的父程序不能用這些工具殺死呢?原因很簡單,這些工具在強行終止資料庫伺服器時,會讓資料庫產生更多的檔案碎片,當碎片達到一定程度的時候,資料庫就有崩潰的危險。比如mysql伺服器最好是按其正常的程式關閉,而不是用pkill mysqld 或killall mysqld 這樣危險的動作;當然對於占用資源過多的資料庫子程序,我們應該用kill 來殺掉。

linux程序管理(一)

程式是為了完成某種任務而設計的軟體,比如openoffice是程式。什麼是程序呢?程序就是執行中的程式。乙個執行著的程式,可能有多個程序。比如自學it網所用的www伺服器是apache伺服器,當管理員啟動服務後,可能會有好多人來訪問,也就是說許多使用者來同時請求httpd服務,apache伺服器將會...

LINUX程序管理

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

linux程序管理

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