1、什麼是進程?
進程:可並發執行的程序在一定數據集合上的運行過程。進程即是資源分配的基本單位,也是調度和分派的基本單位。
2、UNIX操作系統進程調度算法:
多級反饋調度隊列算法。
3、進程狀態:創建、初始、就緒(活動、靜止)、執行、阻塞(活動、靜止)、結束。
4、進程監控命令:
ps 命令和進程工具/usr/proc/bin下的工具級。
可以將ps和grep命令組合使用來搜索特定的信息。
5、/usr/proc/bin的命令介紹:
pstop 停止進程
prun pid 重新啟動進程
ptime pid 使用微狀態計算進程時間
pwait pid 等待指定的進程終止.
pcred pid 顯示可信度
pfiles pid 顯示已打開文件的fstat 和fcntl 信息
pflags pid 顯示每個lwp 的/proc 跟蹤標志,等待和持有信號量以及其他狀
態信息
pldd pid 顯示鏈接到每個進程的動態鏈接庫
pmap pid 顯示地址映射空間
psig pid 顯示信號操作
pstack pid 顯示每個lwp 的十六進制與符號堆跟蹤
ptree pid 顯示包含指定PID 的進程樹
pwdx oid 顯示當前工作目錄
6、ps命令格式:
ps [ -aAdeflcjLPy ] [ -o format ] [ -t termlist ] [ -u userlist ] [ -U userlist ] [ -G grouplist ] [ -p proclist ] [ -g pgrplist ] [ -s sidlist ]
7、常用的參數:
-e 輸出所有進程報告
-f 在第一欄顯示進程所有者的名字(不是UID)。該選項關閉-l、–t、–s 和–r 選項,打開-a 選項。
-l 產生一個長的輸出報告,只是不包含STIME 字段
8、ps -el的相關輸出參數解釋:
bash-2.05$ ps -el
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
19 T 0 0 0 0 0 SY ? 0 ? 0:16 sched
8 S 0 1 0 0 40 20 ? 151 ? ? 0:00 init
19 S 0 2 0 0 0 SY ? 0 ? ? 0:00 pageout
19 S 0 3 0 0 0 SY ? 0 ? ? 0:30 fsflush
8 S 0 377 1 0 40 20 ? 223 ? ? 0:00 sac
8 S 0 378 1 0 40 20 ? 224 ? console 0:00 ttymon
8 S 0 131 1 0 40 20 ? 289 ? ? 0:00 rpcbind
F 十六進制標志,它們加起來表示進程的當前狀態。如下所述:
00 進程終止,而且它們在進程表中的空間已釋放。
01 系統進程,長駐內存
02 進程被父進程跟蹤
04 進程被父進程跟蹤而且已被停止
08 該進程無法被信號量喚醒
10 該進程當前在內存中,而且被鎖定直到一個事件完成
20 進程不能被交換出
S 進程當前狀態,由以下字母之一顯示:
O 當前正在處理器上運行
S 睡眠;等待I/O事件完成
R 運行結束
I 空閒;進程被創建
Z 僵死。進程已終止
T 由於父進程跟蹤而停止
X 等待更多的內存
UID 進程所有者的用戶ID
PID 進程ID
PPID 父進程ID
C 進程的CPU使用情況(即進程占CPU時間的百分比)
PRI 進程優先權方案。較大的數表示較低的優先權
NI 進程的nice值,該值與優先權方案相關聯。使一個進程“nicer”意指降低該進程的優先權,以使它不會用盡CPU的時間
SZ 進程請求的虛擬內存量。這是該系統對內存需求的一個好的指標。
TTY 啟動進程(或者父進程)的終端。帶問號的進程無控制終端(通常為系統進程)
TIME 自進程啟動以來占CPU時間總量
COMD 產生進程的命令
9、使用ps報告。
查找屬於一個用戶的許多相同的工作。Kill命令終止進程。 ps -U username
查找TIME字段中占用了很多CPU時間的進程。這樣的進程可能在死循環。ps -e
查找C字段,找出不重要但占用了大量CPU時間的進程。如果該進程獲取過多內存,刪除該進程。如果許多進程占用了大量內存,則系統可能需要增加內存。ps -el
注意使用越來越多CPU時間的失控進程。可以通過使用-f選項查看進程啟動時間(STIME)以及通過查看TIME字段中的CPU時間總量來檢測失控進程。 ps -f
10、刪除進程。
在正常途徑無法結束時才使用刪除命令。
#kill - signal pid
signal:57
signal:
2 中斷
3 退出
4 非法指令
5 跟蹤中斷
6 Abort
7 EMT指令(Emulation競爭trap)
8 浮點格式的異常情況
9 kill(不能被捕獲或忽略)
10 通道錯誤
11不合法的內存區段
12 錯誤系統調用
13 寫入不可讀的連通管道
14 alarm clock
15 軟件結束信號
16 用戶定義的信號1
17用戶定義的信號2
18 子進程狀態被改變
19 電源壞掉
20窗口(Window)的大小被改變
21Urgent(緊急的) Socket Condition
22 Pollable(可查詢的)event
23 停止
24 由用戶終止
25 繼續執行
26 停止終端輸入
27 停止終端輸出
28 virtual Timer expired
29 Profiling time expired
30 超過CPU時間
31 超過文件大小限制
32 Socket I/O possible
有時即使用kill命令,但進程仍未被刪除。最有可能的三種情況:
進程在退出前等待設備完成操作。
進程在等待由於NFS故障而導致的無法使用的資源。要刪除此類進程,輸入kill -quit PID
進程為僵死進程,在ps報告的defunct的消息中顯示。僵死進程是釋放了所有資源,但未接受到父進程確認的進程。只有收到確認才刪除進程在進程表中的入口。下一次引導時僵死進程會被清除。僵死進程不影響系統性能,不需要刪除。
11、優先權控制命
使用priocntl命令可以:
顯示或設置指定進程的調度參
顯示系統調度程序的當前配置信息
執行帶有指定調度參數的命令
每個進程都有不同的級,每級分配有各自不同的調度策略。
系統可能配置的級包括:
系統(SYS)
交互(IA)
實時(RT)
分式共享(TS)
對於分式共享級,用戶提供的優先權范圍為:-20~+20。一個
分時共享進程的優先權(用戶模式優先權)是從父進程繼承
而來。系統在分時調度表中查找用戶模式優先權,加入任何
nice值或這者priocntl優先權值(用戶提供),保證創建的全
局優先權在0~59之間。
在默認配置中,一個可運行的實時進程在任何其它進程之前運行。實時進程使用不當會導致系統性能急劇下降。
1. 顯示進程級的基本信息(進程級或系統調度參數):
輸入priocntl -l並回車
2. 顯示進程的全局優先級
使用ps -ecl命令顯示進程的全局優先權。全局優先權在PRI欄列出
3、指定進程的優先級:
輸入priocntl -e -c class -m user -limit -p priority command - name回車
-e 執行命令
-c 指定級(默認選項是TS(分時共享)或RI(實時)
-m 用戶限制選項,指定-p選項提升或降低優先權的最大量。
-p 允許指定用戶提供的優先權,范圍為-20~+20。
4.更改分時共享進程的調度參數
依照以下步驟更改分時共享進程的調度參數:
1)成為超級用戶。
2)輸入priocntl -s -m user -limit [-p priority] -i id type id -list回車。
-s允許設置用戶優先權范圍的上限
-m 用戶限制選項,指定-p選項提升或降低優先權的最大量。
-p優先權命令名選項,允許指定優先權。
-I id -type和id -list選項使用id -type和id -list的組合標識進程, id -
type指定id類型,如PID或UID。
3)輸入ps -ecl|grep id -list回車。
4)檢查PRI欄的輸出,驗證已經成功地更改了進程狀態。
% priocntl -s -c RT -t 500 -p 20 myprog
% ps -ecl|grep myprog
5. 更改進程
依照以下步驟更改進程級:
1)成為超級用戶。
2)輸入priocntl -s -c class -i id type id -list回車。
-s允許設置用戶優先權范圍的上限並更改優先權
-c 指定想更改的進程級為TS(分時共享)級或RI(實時)級
-I id -type和id -list選項使用id -type和id -list的組合標識進程, id -type指定id
類型,如PID或UID。
3)輸入ps -ecl|grep id -list回車。
4)檢查PRI欄的輸出,驗證已經成功地更改了進程狀態。
注意:必須是超級用戶或者在實時shell中操作,更改進程級為非實時級或者實時級。
6、更改進程優先級
使用nice命令可以提高或降低一個命令或進程的優先權。
不帶參數使用該命令則默認nice值增4個單位,使進程優先
權降低。
注意:必須是超級用戶才能。
/usr/bin/nice command -name(默認,進程的優先權降低4個單位)
/usr/bin/nice +10 command -name(進程的優先權降低10個單位)
/usr/bin/nice -10 command -name(進程的優先權增加10個單位)
/usr/bin/nice - -10 command -name(nice 值減少10個單位,提高一個命令的優先權)