在linux系統中,內核的功用有:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等,在這眾多的模塊中,進程管理是相對重要的一環,即使不像文件系統和網絡功能那么復雜。在進程管理中,內核對進程的創建、切換、撤銷和調度都有很詳細的定義。
1、進程類型
守護進程:在系統引導過程中啟動的進程,跟終端無關的進程
前臺進程:跟終端相關,通過終端啟動的進程
注意:也可把在前臺啟動的進程送往后臺,以守護模式運行
2、進程狀態
在內存中運行的進程也有著各種各樣的狀態
運行態R:running
就緒態:ready
睡眠態
可中斷S:interruptable
不可中斷D:uninterruptable
停止態T:stopped,暫停于內存中,但不會被調度,除非手動啟動
僵死態Z:zombie,結束進程,父進程結束前,子進程不關閉
3、進程調度
調度策略:調度策略就是這樣一組規則:決定什么時候以怎樣的方式選擇一個新進程運行。所以定義一個進程的優先級來滿足這樣一種策略。這個策略以0-139的優先級來表示。
實時優先級:1-99
無需調整,數字越大,優先級越高
靜態優先級:100-139
優先級以Nice值調整
Nice:-20—-19 ,存在于task_struct結構體中
公式如下:
pri(new)=nice+pri(old)
調度算法:早起的Linux中,調度算法是根據進程的優先級選擇“最佳”進程來執行,它的缺點是時間開銷與“可運行進程數量”有關。某種調度算法一定滿足一種函數關系,業界稱為Big O
Big O:時間復雜度,用時和規模的關系。有:
O(1), O(logn), O(n)線性, O(n^2)拋物線, O(2^n)
4、進程管理命令之pstree
pstree – display a tree of processes
顯示進程數
5、進程管理命令之ps
Linux系統各進程的相關信息均保存在/proc/PID目錄下的各文件中;
ps [OPTION]…
選項:支持兩種風格
常用組合:aux
u: 以用戶為中心組織進程狀態信息顯示
a: 與終端相關的進程;
x: 與終端無關的進程;
~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT TART TIME COMMAND
USER | 運行進程的用戶 |
PID | 進程ID |
%CPU | 占用CPU |
%MEM | 占用內存 |
VSZ | 虛擬內存集 |
RSS | 實際內存集 |
TTY | 終端信息 |
STAT | 進程狀態 |
START | 進程狀態 |
TIME | 運行時間 |
COMMAND | 進程名稱 |
常用組合:-ef
–e: 顯示所有進程
-f: 顯示完整格式程序信息
常用組合:-eFH
-F: 顯示完整格式的進程信息
-H: 以進程層級格式顯示進程相關信息
6、進程管理命令之pkill
pkill [options] pattern
-u uid: effective user
-U uid: real user
-t terminal: 與指定終端相關的進程
-l: 顯示進程名
-a: 顯示完整格式的進程名
-P pid: 顯示其父進程為此處指定的進程的進程列表
7、進程管理命令之pidof
根據進程名獲取其PID
8、進程管理命令之top
Tasks
total | 進程總數 |
running | 運行進程數 |
sleeping | 休眠態進程數 |
stopped | 停止態進程數 |
zobie | 僵死態進程數 |
%Cpu(s)
us(user space) | 用戶空間占用CPU百分比 |
sy(system) | 內核空間占用CPU百分比 注:高負載時:us:sy=7:3 |
ni(nice) | 修改nice值占用的CPU百分比 |
id(idle) | 空閑的CPU百分比 |
wa(wait) | 等待IO完成占用的CPU百分比 |
hi(hardware interrupt) | 硬中斷占用CPU百分比 |
si(software interrupt) | 軟中斷占用CPU百分比 |
st(stole) | 被偷走的CPU,比如VMware |
buffer(緩沖) | 元數據 |
cache(緩存) | 數據 |
PID | 進程號 |
USER | 進程發起者 |
PR(priority) | 優先級 |
NI(Nice) | nice值 |
VIRT | 虛擬內存集 |
RES | 常駐內存集 |
SHR | 共享內存集 |
S(status) | 狀態 |
%CPU | CPU占用比 |
%MEM | 內存占用比 |
TIME+ | 運行時長 |
COMMAND | 啟動進程 |
對顯示排序的方法:
P | 占據的CPU百分比 |
M | 占據內存百分比 |
T | 累積占據CPU時長 |
首部信息顯示:
l | uptime信息 |
t | tasks及cpu信息 |
#數字 | cpu分別顯示 |
m | memory信息 |
s | 修改刷新時間間隔 |
Esc | 退出 |
k | 終止指定進程 |
W | 保存文件 |
q | 退出命令 |
9、進程管理命令之htop
比top更加高級的進程管理軟件
f1幫助
f2切換CPU、mem、swap顯示方式
f10退出
常用選項:
-d #: 指定延遲時間;
-u UserName: 僅顯示指定用戶的進程;
-s COLOMN: 以指定字段進行排序;
命令:
s: 跟蹤選定進程的系統調用;
l: 顯示選定進程打開的文件列表;
a:將選定的進程綁定至某指定CPU核心;
t: 顯示進程樹
注意:Fedora-EPEL源
10、進程管理命令之vmstat
vmstat -s: 內存的匯總信息
procs | 項目 |
r | 等待運行的進程的個數,和核心數有關 |
b | 處于不可中斷睡眠態的進程個數(被阻塞的隊列的長度) |
swap | 項目 |
si | 從磁盤交換進內存的數據速率(kb/s) |
so | 從內存交換至磁盤的數據速率(kb/s) |
io | 項目 |
bi | 從塊設備讀入數據到內存的速率(kb/s) 讀 |
bo | 從內存寫入磁盤的速率(kb/s) 寫 |
memory | 項目 |
swad | 交換內存的使用總量 |
free | 空閑物理內存總量 |
buffer | 用于buffer的內存總量 |
cache | 用于cache的內存總量 |
system | 項目 |
in: interrupts | 中斷速率 |
cs: context switch | 進程切換速率 |
cpu | 項目 |
us | 用戶空間占用的比例 |
sy | 內核空間占用的比例 |
id | 空閑空間占用的比例 |
wa | 等待IO完成所消耗的時間比例 |
st | 被虛擬化技術偷走的時間比例 |
11、進程管理命令之glances
glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [–password] [-t refresh] [-f file] [-o output]
內建命令:
a Sort processes automatically l Show/hide logs
c Sort processes by CPU% b Bytes or bits for network I/O
m Sort processes by MEM% w Delete warning logs
p Sort processes by name x Delete warning and critical logs
i Sort processes by I/O rate 1 Global CPU or per-CPU stats
d Show/hide disk I/O stats h Show/hide this help screen
f Show/hide file system stats t View network I/O as combination
n Show/hide network stats u View cumulative network I/O
s Show/hide sensors stats q Quit (Esc and Ctrl-C also work)
y Show/hide hddtemp stats
常用選項:
-b: 以Byte為單位顯示網卡數據速率;
-d: 關閉磁盤I/O模塊;
-f /path/to/somefile: 設定輸入文件位置;
-o {HTML|CSV}:輸出格式;
-m: 禁用mount模塊
-n: 禁用網絡模塊
-t #: 延遲時間間隔
-1:每個CPU的相關數據單獨顯示;
C/S模式下運行glances命令:
服務模式:
glances -s -B IPADDR
IPADDR: 指明監聽于本機哪個地址
客戶端模式:
glances -c IPADDR
IPADDR:要連入的服務器端地址
12、進程管理命令之dstat
dstat [-afv] [options..] [delay [count]]
-c: 顯示cpu相關信息;
-C #,#,…,total
-d: 顯示disk相關信息;
-D total,sda,sdb,…
-g:顯示page相關統計數據;
-m: 顯示memory相關統計數據;
-n: 顯示network相關統計數據;
-p: 顯示process相關統計數據;
-r: 顯示io請求相關的統計數據;
-s: 顯示swapped相關的統計數據;
–top-cpu:顯示最占用CPU的進程;
–top-io: 顯示最占用io的進程;
–top-mem: 顯示最占用內存的進程;
–top-lantency: 顯示延遲最大的進程;
13、進程管理命令之kill
kill命令:
向進程發送控制信號,以實現對進程管理
顯示當前系統可用信號:
# kill -l
# man 7 signal
常用信號:
1) SIGHUP: 無須關閉進程而讓其重讀配置文件;
2) SIGINT: 中止正在運行的進程;相當于Ctrl+c;
9) SIGKILL: 殺死正在運行的進程;
15) SIGTERM:終止正在運行的進程;
18) SIGCONT:
19) SIGSTOP:
指定信號的方法:
(1) 信號的數字標識;1, 2, 9
(2) 信號完整名稱;SIGHUP
(3) 信號的簡寫名稱;HUP
向進程發信號:
kill [-SIGNAL] PID…
終止“名稱”之下的所有進程:
killall [-SIGNAL] Program
14、Linux的作業控制
前臺作業:通過終端啟動,且啟動后一直占據終端;
后臺作業:可以通過終端啟動,但啟動后即轉入后臺運行(釋放終端);
如何讓作業運行于后臺?
(1) 運行中的作業
Ctrl+z
(2) 尚未啟動的作業
# COMMAND &
此類作業雖然被送往后臺運行,但其依然與終端相關;如果希望送往后臺后,剝離與終端的關系:
# nohup COMMAND &
查看所有作業:
# jobs
作業控制:
# fg [[%]JOB_NUM]:把指定的后臺作業調回前臺;
# bg [[%]JOB_NUM]:讓送往后臺的作業在后臺繼續運行;
# kill [%JOB_NUM]:終止指定的作業;
原創文章,作者:Net20_赤羽,如若轉載,請注明出處:http://www.www58058.com/48528
湯哥,這篇排版體驗有點差啊,文字突然那么大,圖也沒了