進程管理
進程概念
? 內核的功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、 安全功能等
? Process: 運行中的程序的一個副本,是被載入內存的一個指令集合
進程ID( Process ID, PID)號碼被用來標記各個進程
UID、 GID、和SELinux語境決定對文件系統的存取和訪問權限,
通常從執行進程的用戶來繼承
存在生命周期
? task struct: Linux內核存儲進程信息的數據結構格式
? task list:多個任務的的task struct組成的鏈表
? 進程創建:
init(centos6):第一個進程
父子關系
systemd(centos7 )
父子進程
進程:都由其父進程創建, COW
fork(), clone()
進程優先級
? 進程優先級:
系優先級: 數字越小,優先級越高
0-139( CentOS4,5)
各有140個運行隊列和過期隊列
當進程發出請求使用cpu時,會按先后順序或者系統優先級大小,在運行隊列中等候。由于cup并非將全部時間分配給一個進程使用,而是將單位時間分為多個片段,然后按進程的優先級或多或少分配,當一個進程使用完所分配的時間,但是進程還沒有完全結束,就會按順序進入過時隊列;當cpu完成所有運行隊列的進程是,就會講過時隊列變為運行隊列,再次運行,直至進程結束。
0-98, 99( CenOS6)
實時優先級: 99-0:值最大優先級最高
Nice值: -20, 19對應系統優先級100-139或99
? Big O:時間復雜度,用時和規模的關系
O(1), O(logn), O(n)線性, O(n^2)拋物線, O(2^n)
進程相關概念
? 進程內存:
Page Frame: 頁框,用存儲頁面數據,存儲Page 4k
如同磁盤一樣,內存并不會應內存要多少空間,就會講整段連續空間分配給進程,內存會事先將內存如磁盤一樣分block,而內存則成為page frame頁框,進程需要多大的空間,內存將會按其所需分配相應數量的頁框,或連續或不連續,然后標記其位置,cup會按位置調用指定地址的內存內容
LRU: Least Recently Used 近期最少使用算法,釋放內存
物理地址空間和線性地址空間
MMU: Memory Management Unit負責轉換線性和物理地址
? IPC: Inter Process Communication
同一主機上
signal
shm: shared memory
semophore 信號量,一種計數器
不同主機上:
rpc: remote procedure call
socket: IP和端口號
進程狀態
? Linux內核:搶占式多任務
? 進程類型:
守護進程: daemon,在系統引導過程中啟動的進程, 和終端無關進程(一般標記為?)
前臺進程:跟終端相關,通過終端啟動的進程(一般標記其終端類型與終端號)
注意:兩者可相互轉化
[root@www ~]# ps aux |head
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2107 0.0 0.4 52976 4744 ? S 07:19 0:00 /usr/libexec/polkit-1/polkitd
rtkit 2118 0.0 0.1 168456 1192 ? SNl 07:19 0:01 /usr/libexec/rtkit-daemon
root 2123 0.0 0.2 141788 2064 ? S 07:19 0:00 pam: gdm-password
root 3272 0.0 0.4 102084 4140 ? Ss 14:07 0:01 sshd: root@pts/1,pts/0
root 3276 0.0 0.1 108452 1900 pts/1 Ss+ 14:07 0:00 -bash
postfix 4608 0.0 0.3 80976 3404 ? S 22:20 0:00 pickup -l -t fifo -u
root 4674 0.0 0.1 108352 1816 pts/0 Ss 22:51 0:00 -bash
root 4697 0.0 0.1 110248 1148 pts/0 R+ 22:51 0:00 ps aux
root 4698 0.0 0.0 100952 644 pts/0 S+ 22:51 0:00 tail
? 進程狀態:
運行態: running
就緒態: ready
睡眠態:
可中斷: interruptable
不可中斷: uninterruptable
停止態: stopped,暫停于內存中,但不會被調度,除非手動啟動
僵死態: zombie,結束進程,父進程結束前,子進程不關閉
系統管理工具
? 進程的分類:
CPU-Bound: CPU密集型,非交互
如圖形界面,比較耗cpu資源
IO-Bound: IO密集型,交互
如dd命令,cpu使用率低,但是磁盤IO高
? Linux系統狀態的查看及管理工具: pstree, ps, pidof,
pgrep, top, htop, glance, pmap, vmstat, dstat, kill,
pkill, job, bg, fg, nohup
? pstree命令:
pstree – display a tree of processes(以樹形查看進程)
? ps: process state
ps – report a snapshot of the current processes
Linux系統各進程的相關信息均保存在/proc/PID目錄下的各文件中
8
列舉進程ps
? 適用ps來查看進程信息
? ps [OPTION]…
? 支持三種選項:
UNIX選項 如-A -e
BSD選項 如a
GUN選項 如–help
? 默認顯示當前終端中的進程
? a 選項包括所有終端中的進程
? x 選項包括不鏈接終端的進程
? u 選項顯示進程所有者的信息
? f 選項顯示進程的父進程
? o 屬性… 選項顯示定制的信息:
pid、 comm、 %cpu、 %mem、 state、 tty、 euser、 ruser
一般組合ps -aux 使用
進程管理工具
? VSZ: Virtual memory SiZe,虛擬內存集,線性內存
? RSS: ReSident Size, 常駐內存集
? STAT:進程狀態
R: running
S: interruptable sleeping
D: uninterruptable sleeping
T: stopped
Z: zombie
+: 前臺進程
l: 多線程進程
N:低優先級進程
<: 高優先級進程
s: session leader,會話(子進程)發起者
進程管理工具
? 常用組合: -ef
-e: 顯示所有進程
-f: 顯示完整格式程序信息
? 常用組合: -eFH
-F: 顯示更完整格式的進程信息
-H: 以進程層級格式顯示進程相關信息
? 常用組合:自定義
-eo pid,tid,class,rtprio,ni,pri,psr,
pcpu,stat,comm
axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,
pid,pcpu,comm
進程管理工具
? ni: nice值
pri: priority,優先級
psr: processor, CPU編號
rtprio: 實時優先級
搜索進程
? 最靈活: ps 選項 | 其它命令
? 按預定義的模式: pgrep
pgrep [options] pattern
-u uid: effective user,生效者
-U uid: real user,真正發起運行命令者
-t terminal: 與指定終端相關的進程
-l: 顯示進程名
-a: 顯示完整格式的進程名
-P pid: 顯示指定進程的子進程
? 按確切的程序名稱: /sbin/pidof
$pidof bash
系統工具
? uptime
顯示當前時間,系統已啟動的時間、當前上線人數,系統平均負載( 1、 5、 10分鐘的平均負載,一般不會超過1)
? 系統平均負載:
指在特定時間間隔內運行隊列中的平均進程數。
? 如果每個CPU內核的當前活動進程數不大于3的話,那么
系統的性能良好。 如果每個CPU內核的任務數大于5,那么這臺機器的性能有嚴重問題。
? 如果linux主機是1個雙核CPU的話,當Load Average 為6的時候說明機器已經被充分使用了。
(lscpu 可查看cpu情況)
進程管理工具
? top:有許多內置命令:
排序:
P:以占據的CPU百分比,%CPU
M:占據內存百分比,%MEM
T:累積占據CPU時長,TIME+
首部信息顯示:
uptime信息: l命令
tasks及cpu信息: t命令
cpu分別顯示: 1 (數字)
memory信息: m命令
退出命令: q
修改刷新時間間隔: s
終止指定進程: k
保存文件: W
top命令
? 欄位信息簡介
us:用戶空間
sy:內核空間
ni:調整nice時間
id:空閑
wa:等待IO時間
hi:硬中斷
si:軟中斷(模式切換)
st:虛擬機偷走的時間
進程管理工具
?欄位信息簡介
PID (Process Id):任務的進程ID
PPID (Parent Process Pid):父任務的進程ID
RUSER (Real User Name):任務的所有者真實名稱
UID (User Id):任務所有者ID
USER (User Name):任務所有者名稱
GROUP (Group Name):任務所有者群組名
TTY (Controlling Tty):終端
PR (Priority):優先級
%CPU (CPU usage):CPU使用率
%MEM (Memory usage (RES)):內存使用率
S (Process Status):進程狀態
TIME+ (CPU Time, hundredths):CPU時間,精確到秒
進程管理工具
? 選項:
-d #: 指定刷新時間間隔,默認為3秒
-b: 以批次方式
-n #: 顯示多少批次
? htop命令:需從Fedora-EPEL源安裝
http://172.16.0.1/fedora-epel/7/x86_64
選項:
-d #: 指定延遲時間;
-u UserName: 僅顯示指定用戶的進程;
-s COLUME: 以指定字段進行排序;
子命令:
s: 跟蹤選定進程的系統調用;
l: 顯示選定進程打開的文件列表;
a:將選定的進程綁定至某指定CPU核心;
t: 顯示進程樹
? vmstat命令:虛擬內存信息
vmstat [options] [delay [count]]
vmstat 2 5(隔2秒顯示一次一共顯示5次)
? procs:
r:等待運行的進程的個數,和核心數有關
b:處于不可中斷睡眠態的進程個數(被阻塞的隊列的長度)
? memory:
swpd: 交換內存的使用總量
free:空閑物理內存總量
buffer:用于buffer的內存總量
cache:用于cache的內存總量
? swap:
si:從磁盤交換進內存的數據速率(kb/s)
so:從內存交換至磁盤的數據速率(kb/s)
? io:
bi:從塊設備讀入數據到系統的速率(kb/s)
bo: 保存數據至塊設備的速率
? system:
in: interrupts, 中斷速率,包括時鐘
cs: context switch, 進程切換速率
? cpu:
us:Time spent running non-kernel code
sy: Time spent running kernel code
id: Time spent idle. Linux 2.5.41前,包括IO-wait time.
wa: Time spent waiting for IO. 2.5.41前,包括in idle.
st: Time stolen from a virtual machine. 2.6.11前, unknown.
? 選項:
-s: 顯示內存的統計數據
pmap命令:進程對應的內存映射
? pmap [options] pid […]
-x: 顯示詳細格式的信息;
#pmap 1
另外一種實現:
# cat /proc/PID/maps
glances命令: EPEL源
? 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:要連入的服務器端地址
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相關的統計數據
–tcp
–udp
–unix
–raw
–socket
–ipc
–top-cpu:顯示最占用CPU的進程
–top-io: 顯示最占用io的進程
–top-mem: 顯示最占用內存的進程
–top-latency: 顯示延遲最大的進程
kill命令:(默認是發15信號)
向進程發送控制信號,以實現對進程管理
顯示當前系統可用信號: 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
按PID: kill [-SIGNAL] pid …
按名稱: killall [-SIGNAL] comm…
killall bash
按模式: pkill [options] pattern
-SIGNAL
-u uid: effective user,生效者
-U uid: real user,真正發起運行命令者
-t terminal: 與指定終端相關的進程
-l: 顯示進程名
-a: 顯示完整格式的進程名
-P pid: 顯示父進程為此處指定的進程的進程列表
作業管理
? Linux的作業控制
前臺作業:通過終端啟動,且啟動后一直占據終端;
后臺作業:可通過終端啟動,但啟動后即轉入后臺運行(釋放終端)
? 如何讓作業運行于后臺?
(1) 運行中的作業: Ctrl+z(前臺到后臺,在后臺是休眠狀態)
(2) 尚未啟動的作業: # COMMAND &
將作業放置后臺,作業會有兩種狀態 后臺運行 與后臺休眠;但是后臺運行的作業有標準,有標準輸出也會正常輸出
? 后臺作業雖然被送往后臺運行,但其依然與終端相關;退出終端,將關閉后臺作業。如果希望送往后臺后,剝離與終端的關系
# nohup COMMAND & #screen;COMMAND
? 查看所有作業:
# jobs
? 作業控制:
# fg [[%]JOB_NUM]:把指定的后臺作業調回前臺;
# bg [[%]JOB_NUM]:讓送往后臺的作業在后臺繼續運行;
# kill [%JOB_NUM]:終止指定的作業;(18是繼續在后臺運行;19是放置在后臺,停止狀態)
并行運行
f1.sh ;f2.sh ;f3.sh 順序運行
? 同時運行多個進程,提高效率
? vi all.sh
f1.sh&
f2.sh&
f3.sh&
然后運行all.sh
? (f1.sh&);(f2.sh&);(f3.sh&)
? { f1.sh& f2.sh& f3.sh& } 無名函數
進程優先級(讓cpu多分配一點時間。然而并非所有程序提高優先級,就能更快工作,如ping,需要等待對方回應才能ping第二個包)
普通用戶只能講優先級調大(nice優先級越大資源越少)
? 進程優先級調整:
靜態優先級: 100-139
進程默認啟動時的nice值為0,優先級為120
只有根用戶才能降低nice值(提高優先性)
? nice命令:
nice [OPTION] [COMMAND [ARG]…]
nice -n {優先級} COMMAND
? renice命令:(運行狀態下更改)
renice [-n] priority pid…
? 查看:
ps axo pid,comm,ni
ps :搭配各種選項,可以詳細查看當前系統運行的所有進程信息
pstree:以樹形式,【搭配各種選型】查看當前系統所運行的大部分進程(可以直觀地查看進程之間的父子關系)
uptime:現在的時間 、系統開機運轉到現在經過的時間 、連線的使用者數量 、最近一分鐘,五分鐘和十五分鐘的系統負載
沒有更多選項,-V查看uptime版本號
vmstat:顯示的項目比較少(procs、memory、swap、disk、cpu),但是直觀
pmap:查看指定進程(pid)以及其所依賴的褲文件,內存映射。報告進程的地址空間和內存狀態信息
top:比ps更加詳細直觀查看系統運行的狀況,融合了ps、uptime、vmsta的功能,詳盡列出系統各硬件當前運行狀態,可執行kill命令(根據kill信號的不同,可對進程進行關閉,強制關閉,重啟等操作),相應的比上邊結束的工具所暫用系統資源大一點
htop:top的升級版(用戶相對關注的信息會高亮),有用戶交互的操作(ssh連接狀態下)
glances(需要EPEL源):與htop相同,但是比htop要耗系統資源
dstat:顯示系統狀況,不包括進程的監視,每秒刷新一次
kill:根于kill信號不同,對進程進行管理(不包括創建新進程)
原創文章,作者:hunter,如若轉載,請注明出處:http://www.www58058.com/45510