linux進程及作業管理
cpu指令權限等級:
特權級也叫hierarchical protection domains, 有的也叫用戶態. 是一種用來保護數據和阻止惡意行為的機制. 電腦操作系統提供不同權限訪問級別的資源. 特權級分為四級, 特權級0,1,2,3. 在windows中只使用特權級0和特權級3, 特權最高的是特權級0, 可以直接操作硬件, 如CPU和內存, 一般操作系統和驅動運行在此級別下. 特權級3是給一般用戶程序使用的, 可以調用基本的cpu指令
kernel –> ring0 –> ring1 –> ring2 –> ring3
linux系統的組成部分: 內核 + 根文件系統
內核的功用: 進程管理、內存管理、網絡協議棧、文件管理
用戶模式
內核模式
模式切換
Process: 運行中的程序的一個副本;進程有自己的生命周期
linux內核存儲進程信息的固定格式: task struct
多個任務的task struct 組件的鏈表: task list
進程創建:
init進程: 初始化進程, 是內核加載的第一個進程, 是其他所有進程的父進程
進程: 都是由其父進程創建
fork(), clone()
進程優先級:
1-139:
0-99: 實時優先級
100-139: 靜態優先級; 數字越小, 優先級越高
nice值:
-20, 19
Big O標準: 衡量進程消耗的時間
O(1), O(logn), O(n), O(n^2), O(2^n)
進程內存:
Page Frame: 頁框, 用于存儲頁面數據
存儲Page
MMU: Memory Management Unit, 內存管理單元
IPC機制: Inter Process Communication(進程通信)
同一主機上:
signal
shm: share memory
semerrohor(老式)
不同主機:
rpc機制: remote procecure call, 遠程過程調用
socket: 套接字通信,
linux內核: 搶占式多任務進程
進程類型:
守護進程: daemon, 在系統引導過程中啟動的進程, 跟終端無關的進程
前臺進程: 跟終端相關, 通過終端啟動的進程
注意: 也可把在前臺啟動的進程送往后臺, 以守護模式運行
進程狀態:
運行態: running
就緒態: ready
睡眠態:
可中斷睡眠: interruptable
不可中斷睡眠: uninterruptable
停止態: 暫停于內存中, 但不會被調度, 除非手動啟動; stopped
僵死態: zombie
進程的分類:
CPU-Bound
IO-Bound
linux上的進程查看及管理工具:
pstree,ps,pidof, pgrep, top, htop, glances, pmap, vmstat, dstat, kill, pkill, jobs, bg, fg, nohup, nice, renice, kuillall, …
CentOS 5: SysV init
CentOS 6: upstart
CentOS 7: systemd
/sbin/init
1、pstree:
顯示進程樹
2、ps – report a snapshot of the current process. 報告當前進程的快照
/proc/: 內核中的狀態信息
內核參數: 可設置其值從而調整內核運行特性的參數; /proc/sys/
狀態變量: 其用于輸出內核中統計信息或狀態信息, 僅用于查看
參數: 模擬成文件系統類型;
進程: /proc/#
#: 進程PID
用法:
ps [OPTIONS]
選項有三種風格:
UNIX options
BSD options
GNU long options
啟動進程的方式:
系統啟動過程中自動啟動: 與終端無關的進程;
用戶通過終端啟動: 與終端相關的進程;
選項:
a: 所有與終端相關的進程
x: 所有與終端無關的進程 u: 以用戶為中心組織進程狀態信息顯示; 并顯示出是哪個用戶的名稱
常用組合1: aux 三個選項通常組合起來使用
STAT: 進程狀態
R: running
S: interruptable sleeping
D: uninterruptable sleeping
T: Stopped
Z: zombie
+: 前臺進程
l: 多線程進程
N: 低優先級進程
<: 高優先級進程
s: session leader
TIME: 累計占用CPU的時間
COMMAND: 由哪個命令啟動的進程, 其中帶[]的表示內核線程
VSZ: 虛擬內存集, 占用的內存大小
RSS: 常駐內存集, Resident Size, 不能移動到交換內存中
-e: 顯示所有進程
-f: 顯示完成格式的進程信息
-ef: 顯示完成格式的所有進程的信息
STIME: 啟動時間
TIME: 累計運行的時間
C: CPU的占用百分比, cpu utilization
-F: 顯示完成格式的進程信息
ps -eF
PSR: 顯示運行在哪顆CPU上
-H: 以層級結構顯示進程的相關信息, 顯示父進程和子進程的層級結構
o field1, field2, …: 自定義要顯示的字段, 各選項之間以 , 間隔
常用fields: pid, ni, pri, psr, pcpu, stat, comm, tty, ppid, rtprio
ni: nice值;[-20,19]
priority: 優先級
rtprio: real time priority, 實時優先級
常用組合:
ps -eFH
ps -eo
ps axo
3、pgrep、pkill – 查詢進程或者向進程發送信號
– look up or signal processes based on name and other attributes
pgrep [option] pattern
選項:
-u UID: effective user顯示指定用戶的進程
-U UID: 以誰的身份啟動, 真正的用戶
-t TERMINAL: 與指定的終端相關的進程
-l: 顯示進程名
-a: 顯示完整格式的進程名
-P PID: 顯示其父進程, 顯示此進程的子進程
4、pidof – 取指定進程名稱的PID
5、top – display linux processes, 動態顯示進程信息
排序方式:
P: 以占據CPU的百分比
M: 以占用內存百分比
T: 以累計占用CPU時間進行排序
首部信息:
uptime信息, l 命令: 顯示系統時間, 運行時長和平均負載
過去一分鐘, 五分鐘, 15分鐘的平均負載
等待運行的進程隊列的長度
tasks及cpu信息, t 命令:
us: 用戶占用的空間百分比
sy:
ni: 硬件中斷
si: 軟件中斷
st: 被偷走的百分比
內存及CPU信息, m 命令
PID:
PR: 優先級
NI: nice值
RES: 常駐內存集
VIRT: 虛擬內存集
SHR: 共享內存空間
S: 當前狀態
退出 q
修改刷新時間間隔: s 輸入時間間隔
終止指定的進程: k
選項::
-d #: 指定刷新時間間隔,默認3秒
-b: 以批次方式顯示
-n #: 顯示多少批次
uptime 命令
內核的功能: 進程管理(進程調度)
進程調度: 保存現場, 恢復現場
task struct: 任務結構
task list: 任務列表
CPU : us, sy, ni, id(空閑時間比例), hi, si, cs(處理上下文切換消耗的時間百分比) ,st(虛擬化技術分走的比例)
Memory: VSZ(虛擬內存集), RSS(常駐內存集), SHM(共享內存集)
命令: pstree, pgrep, pkill, ps, top, uptime
linux進程及作業管理(2)
epel yum倉庫
$releasever: 發行的主版本號
$basearch: 架構
1、 htop:
-d #: 指定延遲時間的間隔
-u UserName: 僅顯示指定用戶的進程
-s COLUME: 以指定的字段進行排序
子命令:
F1: 獲取幫助
l: 顯示選定的進程打開的文件列表
s: 跟蹤選定的進程執行的系統調用
F5 | t: 以樹狀結構顯示進程的層級結構
a: 將選定的進程綁定至某指定的CPU核心
F2: 設定
2、vmstat – 報告虛擬內存的統計數據
vmstat [options] [delay[count]]
delay[count] :
delay: 延遲時間
count: 以delay指定的延遲時間顯示的次數
proc:
r: running, 處于等待運行的進程的個數, cpu上等待運行的任務的隊列長度
b: 處于不可中斷睡眠態的進程的個數, 被阻塞的任務隊列的長度
memory:
swpd: 交換內存的使用總量
free: 空閑的物理內存總量
buffer: 用于buffer的內存總量
cache: 用于cache的內存總量
swap:
si: 數據進入swap中的數據的速率(kb/s)
so: 數據離開swap的速率(kb/s)
io:
bi: 從塊設備讀入數據到系統的速率(kb/s)
bo: 保存數據至塊設備的速率(kb/s)
system: 數據盡量小一些好, 數值變大,說明CPU功能不足
in: interrupts, 中斷速率
cs: context switch, 上下文切換的速率
cpu:
us: user space, 用戶空間
sy: system
id: idle, 空閑的
wa: wait, 等待完成
st: stolen, 虛擬化技術占用的比例
option:
-s: 顯示內存統計數據
3、pmap – 報告內存的映射表, report memory map of a process
pmap [option] pid […]
-x: 顯示詳細格式的信息
另一種查看方式: cat /proc/<PID>/maps
4、glances – A cross-platform curses-based monitoring tool, 一個跨平臺的工具
內建命令
常用選項:
-b: 以Byte為單位顯示網上數據速率
-d: 關閉磁盤I/O模塊
-m: 關閉mount模塊
-n: 關閉network模塊
-t #: 刷新時間間隔
-1: 每個cpu的相關數據單獨顯示
-o {HTML|CSV}: 輸出格式
-f /PATH/TO/SOMEDIR: 設定輸出文件的位置
C/S模式下運行glances命令:
服務模式:
glances -s -B IPADDR
IPADDR: 本機的某地址, 用于監聽
客戶端模式:
glances -c IPADDR
IPADDR: 遠程服務器的地址
5、dstat – versatile tool for generating system resource statistics,
dstat [-afv] [options..] [delay [count]]
常用選項:
-c, –cpu: 顯示cpu的相關信息
-C #, #,…,total
-d, –disk: 顯示磁盤的相關信息
-D sda, sdb,…total
-g: 顯示page相關的速率數據
-m: Memory的相關統計數據
-n: Interface的相關統計數據
-p: 顯示process的相關統計數據
-r: 顯示io請求的相關的統計數據
-s: 顯示swapped的相關統計數據
–tcp
–udp
–raw
–socket
–ipc
–top-cpu: 顯示最占用CPU的進程
–top-io: 最占用IO的進程
–top-mem: 最占用內存的進程
–top-lantency: 延遲最大的進程
6、kill – terminate a process
用于向進程發送信號, 以實現對進程的管理
顯示當前系統可用信號
kill -l[signal]
每個信號的標識方法有三種:
(1)信號的數字標識
(2)信號的完成名稱
(3)信號的簡寫名稱
向進程發送命令
kill [-s signal | -SIGNAL] pid…
常用信號:
(1)SIGHUP: 無須關閉進程而讓其重讀配置文件
(2)SIGINT: 終止正在運行的進程, 相當于ctrl+c
(9)SIGKILL: 強制終止、殺死運行中的進程;
(15)SIGTERM: 終止正在運行中的進程, 一般是后臺進程
(18)SIGCONT: 繼續運行停止的后臺進程, 可以使用 fg
(19)SIGSTOP: 停止在前臺運行的進程, 送到后臺, 可以使用ctrl + z
7、killall – kill processes by name
killall [-SIGNAL] <program name>
linux系統作業控制
job:
前臺作業(foreground): 通過終端啟動, 且啟動后會一直占據終端
后臺作業(background): 可以通過終端啟動, 但啟動后即轉入后臺運行(釋放終端)
如何讓作業運行于后臺?
(1)運行中的作業
ctrl + z
注意: 送往后臺后, 作業會轉為停止態
(2)尚未啟動的作業
#COMMAND &
注意: 此類作業雖然被送往后臺, 但其依然與終端相關; 如果希望把送往后臺的作業剝離與終端的關系:
# nohup COMMAND &
查看所有的作業:
jobs
可實現作業控制的命令
fg [[%] JOB_NUM]: 把指定的作業調回前臺
bg [[%] JOB_NUM]: 讓送往后臺的作業在后臺繼續運行
kill [% JOB_NUM]: 終止指定的作業
進程優先級調整
可通過nice值調整的優先級范圍: 100-139
分別對應于: -20, 19之間
進程啟動時, 其nice值默認為0, 其優先級是120
nice – 以指定的nice值啟動并運行命令
nice [options] [command [ARGU…]]
常用選項:
-n NICE: 指定nice值
注意: 僅管理員可以調低nice值
renice – 調整運行中的進程的優先級
renice [-n] NICE PID…
查看Nice值和優先級:
ps axo pid,ni,priority,comm | grep …
原創文章,作者:black_fish,如若轉載,請注明出處:http://www.www58058.com/47266