Linux進程管理常見命令pstree topmysql
進程相關概念算法
內核功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等sql
進程(process)定義centos
進程=程序+數據+進程控制塊PCB(線性、索引、鏈表)緩存
廣義:是計算機中一個具備必定獨立功能的程序關於某個數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操做系統結構的基礎。安全
狹義:是正在運行的程序的實例。bash
進程特色:①是一個實體,每一個進程都有本身的地址空間(文本區、數據區、堆棧)。②是一個"運行中的程序"的副本,載入內存的活動的實體。是區別於程序是靜態的一組指令的集合。③進程有生命週期,由操做系統來調度。④進程具備併發性和共享性等性質⑤進程對文件系統的訪問權限取決於進程發起者和上下文語境決定網絡
進程的建立session
init:第一個進程(父進程)多線程
進程三種重要狀態和轉換
一、運行態Running:正在被CPU調度執行
二、阻塞態Blocked:等待某種條件知足前,暫時沒法運行。
三、就緒態Ready:全部資源已齊備,等待分配CPU當即執行(萬事俱備,只欠CPU)
四、睡眠態:
可中斷:interruptable
不可中斷:uninterruptable
五、中止態:stopped,暫停於內存,除非手動啓動,不會被調度
六、僵死態:zombie,
進程類型:
一、守護進程: daemon,在系統引導過程當中啓動的進程,和終端無關進程
二、前臺進程:與終端相關,經過終端啓動的進程
二者可相互轉化
A、CPU-Bound:CPU密集型,非交互
B、IO-Bound:IO密集型,交互
I、系統進程:Kernel 系統空間
II、用戶進程:用戶空間
進程在系統中用惟一的ID(非負)標識,進程結束後ID被其餘進程重用。
PID 0:調度進程,內核一部分,系統進程
PID 1: init進程,普通用戶進程,超級用戶特權運行
PID 2: 頁守護進程,虛擬存儲分頁操做
進程調度方式及算法
一、搶佔式:
二、非搶佔式:
先來先服務(FCFS)和短做業優先、高優先權優先、基於時間片的輪詢、多級反饋隊列算法
線程
操做系統調度的基本單位;
不擁有資源,共享同一進程資源,切換速度快開銷小;
一個進程至少有一個線程,且是它的主線程
LRU算法
Least Recently Used最近最少使用,根據歷史訪問記錄來淘汰數據,核心思想是「若是數據最近被訪問過,未來被訪問的概率也更高」。採用鏈表保存緩存數據:新數據插到表頭,當命中將數據移至表頭,表滿淘汰尾部數據。
進程優先級
實時優先級:0-99
非實時優先級:100-139
nice值:-20~19 共40級,值越高,優先級越低;靜態優先級,renice 修改纔會變;
靜態優先級100~139
進程默認啓動時的nice值爲0,優先級爲120
只有root用戶才能調整nice值來提升優先級
renice -10 ping 127.0.0.1
chrt 能夠調整實時優先級
線程
一、單個進程中執行中每一個任務就是一個線程,線程是進程中執行運算的最小單位。
二、一個進程能夠擁有多個線程,一個線程只能屬於一個線程
三、線程沒有地址空間,線程包含在進程的地址空間中。
四、操做系統經過多線程併發處理,來提升事務效率。
IPC進程間通訊
同一主機:pipe | 管道
socket 套接字
signal 信號
shm 共享內存
不一樣主機:
socket IP+port 網絡通訊
RPC 遠程過程調用
MQ 消息隊列的
系統管理工具
Linux系統狀態查看、管理主要工具備:pstree、ps、pidof、pgrep、top、htop、glance、pmap、vmstat、dstat、kill、pkill、job、bg、fg、nohup
pstree命令
以樹狀圖的方式直觀展現進程之間的父子關係。
pstree [-a] [-c] [-h|-Hpid] [-l] [-n] [-p] [-u] [-G|-U] [pid|user]
經常使用選項:
-a 顯示每一個程序的完整指令,包含路徑、參數等
-c 禁用相同子樹的壓縮。默認相同子樹會被壓縮精簡顯示。
-n 按進程PID數值從小到大排序(相同父進程的子進程也會依此排序),默認按進程名asccii碼值排序
-p 顯示進程和PID
pstree -ps #PID :顯示該PID進程的父子關係(centos7獨有)
-u 顯示用戶名
-g 顯示PGIDs。若是同時PIDs和PGIDs,則PIDS優先(centos7獨有)
ps命令
ps [OPTION]
report a snapshot of the current processes
Linux系統各進程的相關信息均保存在/proc/PID目錄下的各文件中
支持三種風格的OPTION:
UNIX選項 ~]#ps -a
BSD選項 ~]#ps a
GNU選項 ~]#ps --user
一、ps選項:默認什麼都不加 ps ,顯示當前終端中的進程
a 包括全部終端中的進程
x 包括不連接終端的進程(跟終端無關的,若有些開機自動運行的進程)
u 顯示進程全部者的信息
f 顯示進程樹,至關於--forest(能夠看到父進程,效果不如pstree -p 直觀)
k|--sort 屬性 對屬性排序,屬性前加- 表示倒序
o 屬性… 選項顯示定製的信息 pid、cmd、%cpu、%mem (只顯示本身關心的指定信息)
L 顯示支持的屬性列表 (eg:ps L 表示ps支持哪些屬性給你打印出來)
ps axo pid,%cpu,%mem,cmd --sort %cpu效果等同
ps axo pid,%cpu,%mem,cmd k %cpu
二、PS常見選項
-C cmdlist 指定命令,多個命令用,分隔 (ps hello.sh例子中,使用/bin/bash hello.sh方式運行或者hello.sh腳本沒有蛇棒機制的第一行。使用ps -C hello.sh 去查看進程是否有hello.sh這個命令時就查詢不到。)
-L 顯示線程 (注意與上面ps L 區別,這裏是 ps -L)
-e: 顯示全部進程,至關於-A
-f: 顯示完整格式程序信息
-F: 顯示更完整格式的進程信息
-H: 以進程層級格式顯示進程相關信息
-u userlist 指定有效的用戶ID或名稱
-U userlist 指定真正的用戶ID或名稱
-g gid或groupname 指定有效的gid或組名稱
-G gid或groupname 指定真正的gid或組名稱
-p pid 顯示指pid的進程
--ppid pid 顯示屬於pid的子進程
-M 顯示SELinux信息,至關於Z
如:vmtoolsd(6193,6193)───{vmtoolsd}(6262,6193),這樣有花括號的就是線程,小括號的就是進程。
三、PS輸出屬性
VSZ:Virtual memory SiZe,虛擬內存集,線性內存
RSS:ReSident Size, 常駐內存集
STAT:進程狀態
R:running
S: interruptable sleeping
D: uninterruptable sleeping
T: stopped
Z: zombie
+: 前臺進程
l : 多線程進程
L:內存分頁並帶鎖
N:低優先級進程
<: 高優先級進程
s: session leader,會話(子進程)發起者
ps axo pid,cmd,user,ruser,nice,pri,rtprio 比較系統優先級,實時優先級,nice優先級,容易混淆
經常使用組合
ps aux | axo | -ef | -eFH | -eo
結合watch命令實時監控:watch -n 1 'ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head'
結合grep命令:ps aux | grep httpd
pgrep命令
加強版的 "ps 選項 | command",功能更豐富,支持:
①預約義模式:
pgrep [options] pattern
-u uid: effective user,生效者
-U uid: real user,真正發起運行命令者
-t terminal: 與指定終端相關的進程
-l: 顯示進程名
-a: 顯示完整格式的進程名
-P pid: 顯示指定進程的子進程
②按確切的程序名稱
pgrep pidof bash
uptime和w
uptime:顯示當前時間,系統已啓動的時間、當前上線人數,系統平均負載(一、五、15分鐘的平均負載,通常不會超過1)
w:比uptime更豐富的系統狀態信息
經常使用選項
-f 開啓或關閉顯示用戶從何處登入系統。
-h 不顯示各欄位的標題信息列。
-l 使用詳細格式列表,此爲預設值。
-s 使用簡潔格式列表,不顯示用戶登入時間,終端機階段做業和程序所耗費的CPU時間。
-u 忽略執行程序的名稱,以及該程序耗費CPU時間的信息。
04:27:43 up 7:02, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/1 192.168.111.1 02:08 7.00s 0.27s 0.02s w
格式解讀:
第一行含義同uptime
第二行:
USER:顯示登陸系統的用戶名
TTY:用戶登陸的終端類型/號
FORM:顯示用戶從何處登陸的,本地登陸(centos6是-;centos7是空的),遠程登陸則顯示遠程IP或主機名
LOGIN@:用戶登陸系統是在什麼時間
IDLE:用戶閒置時間。一旦執行操做,此計時器將重置。
JCPU:以終端的代號區分顯示,表示該終端全部相關的進程(process)執行時所消耗的cpu時間。每當進程結束就中止計時,開始新的進程則會從新計時。
PCPU:表示CPU執行程序耗時。
WHAT:用戶正在執行的程序名
top命令
動態顯示系統狀態信息
VIRT:virtual memory usage 虛擬內存
RES:resident memory usage 常駐內存
SHR:shared memory 共享內存
一、欄位信息簡介
us:用戶空間
sy:內核空間
ni:調整nice時間
id:空閒
wa:等待IO時間
hi:硬中斷
si:軟中斷(模式切換)
st:虛擬機偷走的時間
二、排序:
P:以佔據的CPU百分比,%CPU
M:佔據內存百分比,%MEM
T:累積佔據CPU時長,TIME+
首部信息顯示:
uptime信息:l命令
tasks及cpu信息:t命令
cpu分別顯示:1 (數字)
memory信息:m命令
退出命令:q
修改刷新時間間隔:s
終止指定進程:k
保存文件:W
三、選項:
-d # 指定刷新時間間隔,默認爲3秒
-b 所有顯示全部進程
-n # 刷新多少次後退出
-H 線程模式,示例:top -H -p `pidof mysqld`
四、 htop命令:EPEL源
選項:
-d #: 指定延遲時間;
-u UserName: 僅顯示指定用戶的進程
-s COLUME: 以指定字段進行排序
子命令:
s:跟蹤選定進程的系統調用
l:顯示選定進程打開的文件列表
a:將選定的進程綁定至某指定CPU核心
t:顯示進程樹