一、進程的基本概念shell
(1)內核的功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能緩存
(2)Process: 運行中的程序的一個副本; 存在生命週期安全
(3)task struct:Linux內核存儲進程信息的固定格式,多個任務的task struct組成的鏈表爲task listbash
(4)進程的建立:init由kernel建立,管理一切用戶空間的進程,每一個進程都由其父進程建立,任何進程須要建立子進程時,統一由init進程代理向內核發起請求服務器
init程序在CentOS5,6,7中各不相同:網絡
CentOS 5:SysV init 在系統啓動和引導時,經過執行shell腳本建立各子進程,速度很慢session
CentOS 6:upstart 各子進程的建立和運行優於init,能以並行方式多線建立子進程多線程
CentOS 7:systemd 統一控制各進程和服務的運行,啓動速度很是快app
(5)進程的優先級:ssh
0-139:
1-99:實時優先級;數字越大,優先級越高;
100-139:靜態優先級;用戶可調度管理的優先級,數字越小,優先級越高;
Nice值:-20,19 對應100-139 ;能夠經過調整一個進程的nice值來改變進程的優先級
(6)進程內存:
每一個進程佔用的內存空間分爲兩種:線性地址空間和物理地址空間
內核是負責進行內存的資源分配給進程,虛擬內存中的線性地址空間中的數據與物理內存的物理地址空間數據的對應關係存放在task struct中,進程只能訪問線性地址空間
Page Frame: 頁框,做用是存儲Page,頁面數據 (能存放在內存頁框空間中的數據)
MMU:Memory Management Unit 內存管理單元;負責轉換進程運行須要訪問的線性地址空間和物理地址空間的對應關係
(7)進程間的通訊
IPC: Inter Process Communication 進程間通訊 :
同一主機上:
signal 發信號
shm: shared memory 使用共享內存
semaphore 信號標
不一樣主機上:
rpc: remote procecure call 遠程過程調用
socket: 基於套接字的通訊,不一樣主機實如今套接字文件中進行數據交換
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
二、進程的類型及狀態
Linux內核:搶佔式多任務
進程類型:
守護進程:daemon
在系統引導過程當中啓動的進程,跟終端無關的進程;
前臺進程:跟終端相關,經過終端啓動的進程
注意:也可把在前臺啓動的進程送日後臺,以守護模式運行;
進程狀態:
運行態:running
就緒態:ready 能夠運行,但尚未被運行
睡眠態:
可中斷:interruptable 能夠隨時被調動起來運行
不可中斷:uninterruptable IO過程當中進程須要加載的數據在內存中沒有,因而請求內核將數據從磁盤加載到內存,以便讓進程訪問; 一次IO操做分兩段步驟:數據從磁盤加載到內核內存中,接着從內核內存放置到內存空間中
中止態:stopped 進程暫停於內存中,但不會被調度,除非手動啓動之
僵死態:zombie 子進程的任務完成處於僵死模式,直到父進程將其殺死
進程分類:
CPU-Bound:CPU密集型,一般非交互式的進程更加須要消耗CPU資源
IO-Bound:IO密集型,交互式的進程更須要消耗IO資源
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
三、pstree命令
查看進程樹
pstree - display a tree of processes
例如:
一、查看當前主機的進程樹,能夠看到全部進程都處於systemd進程下,CentOS6中是init
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
四、ps命令
ps命令:
/proc/:內核中的狀態信息,即內核參數;
內核參數: 兩類
一、可設置其值從而調整內核運行特性的參數;/proc/sys/
二、狀態變量:其用於輸出內核中統計信息或狀態信息,僅用於查看;
參數:模擬成文件系統類型;
進程:
/proc/#: /proc目錄下以數字命名的目錄,存放進程的相關信息
#:PID
一、查看/proc目錄,1號目錄即init進程,是全部進程的父進程
二、查看1目錄,在其下存放了不少進程的相關信息
ps - report a snapshot of the current processes. 報告當前進程的快照
只顯示當前命令執行這一刻的全部進程的狀態
ps [options]:
選項有三種風格:
1 UNIX options, which may be grouped and must be preceded by a dash. 必須有-號
2 BSD options, which may be grouped and must not be used with a dash. 不能有-號
3 GNU long options, which are preceded by two dashes. 有--引導的長格式選項
啓動進程的方式:
一、系統啓動過程當中自動啓動:與終端無關的進程;
二、用戶經過終端啓動:與終端相關的進程;
選項:
a:全部與終端相關的進程;
x:全部與終端無關的進程;
u:以用戶爲中心組織進程狀態信息顯示;
經常使用組合之一:aux 表示以用戶爲中心顯示進程,排序時是以PID升序方式排列
USER:啓動進程的用戶
PID:進程號
%CPU:CPU佔用比率
%MEM:內存空間佔用比率
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 會話主導者,例如bash
例如:
一、查看全部與終端相關的進程
PID:進程號 TTY:表示進程是經過哪一個終端啓動的 TIME:累計佔用CPU的時間
COMMAND:由哪一個命令啓動的此進程,帶中括號的表示是內核線程
二、查看全部與終端無關的進程,與終端無關的進程在TTY段會顯示成問號
三、以用戶歸類顯示全部進程
經常使用組合之二:-ef
-e:顯示全部進程
-f:顯示完整格式的進程信息
UID:啓動進程的用戶的UID號
PID:進程號
PPID:0號進程是init啓動以前的過渡進程
C:CPU的佔用百分比
STIME:進程的啓動時間
TTY:與進程相關的終端
TIME:進程累計運行了的時間
CMD:啓動此進程的命令
經常使用組合之三:-eFH
-F:顯示完整格式的進程信息;與-f相同
C: cpu utilization CPU的佔用百分比,0有可能表示佔用比率很是小
PSR:運行於哪顆CPU之上
-H:以層級結構顯示進程的相關信息;顯示的是每一個進程及其子進程,縮進級別相同表示是同級子進程
經常使用組合之四:-eo或axo,Unix和BSD風格,注意o必定要寫在後面,由於o要帶參數
o field1, field2,...:自定義要顯示的字段列表,以逗號分隔;
經常使用的field: pid, ni(nice值), pri(優先級), psr(運行在哪顆CPU上), pcpu(CPU的利用率),
stat(狀態),comm(由哪一個程序啓動), tty(相關的終端), ppid(父進程的進程號), rtprio(實時優先級)
ni:nice值;
priority:priority, 優先級;
rtprio:real time priority,實時優先級;
例如:
一、自定義只顯示進程的pid和哪一個程序啓動的此進程
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
五、pgrep及pkill命令
pgrep,pkill
- look up or signal processes based on name and other attributes
根據進程名或其餘屬性來查詢進程或向進程發送信號,用於進程過濾
pgrep [options] pattern
-u uid:effective user 顯示有效用戶運行的進程
-U uid:read user 顯示指定用戶的進程
-t TERMINAL:查看與指定終端相關的進程;
-l:顯示進程名;
-a:顯示完整格式的進程名;
-P pid:顯示此進程的子進程;
pgrep的全部選項一樣適用於pkill命令
例如:
一、顯示postfix系統用戶運行的進程
二、顯示postfix系統用戶運行的進程,同時顯示進程名
三、顯示全部進程中包含ssh字符串的進程
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
六、pidof命令
pidof命令:根據進程名,取其pid;
例如:
一、查看sshd進程的pid
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
七、top命令
top命令: - display Linux processes
以動態方式顯示全部進程的狀態信息,根據佔用資源倒序顯示
top - 19:31:27 up 45 min, 2 users, load average: 0.01, 0.02, 0.05
19:29:24表示系統當前時間 43min表示系統運行時長,2 users表示當前登陸到系統的用戶數
load average:0.08,0.03,0.05表示過去1分鐘、5分鐘、15分鐘的等待運行的進程的平均隊列長度,隊列雲長表示CPU的負載越大,uptime命令也能夠查看此行信息
Tasks: 359 total, 1 running, 358 sleeping, 0 stopped, 0 zombie
一共運行了359個進程,1個處在運行狀態,358個處於睡眠狀態,0箇中止態,0個僵死態
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.5 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st
CPU佔用百分比:us(用戶空間的進程所佔用的CPU的百分比),sy(內核空間佔用百分比)
ni(nice值調整所佔用的CPU的百分比),id(CPU空閒時間所佔用的百分比)
wa(等待IO完成所佔用的百分比),hi(處理硬件中斷所佔用的百分比)
si(處理軟件中斷所佔用的百分比),st(被偷走的百分比,例如被虛擬機佔用)
KiB Mem : 1003184 total, 402772 free, 157448 used, 442964 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 611156 avail Mem
以Kb爲單位顯示物理內存和交換分區的空間使用信息,1003184 total(總空間爲1G),free(空閒空間)
used(已用空間),buff/cache(用戶緩衝和緩存所佔用的內存空間,能夠被回收後使用)
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
進程號 用戶 優先級 nice值 虛擬內存集 常駐內存集 共享內存空間 當前狀態 CPU佔用百分比 內存佔用百分比 運行時長 啓動進程的命令
排序:(可使用交互式命令,敲字母鍵)
P:以佔據CPU百分比排序;
M:以佔據內存百分比排序;
T:累積佔用CPU時間排序;
1:數字鍵1能夠分散顯示每顆CPU佔用的百分比
首部信息:
uptime信息:l命令 可將其顯示/關閉
tasks及cpu信息:t命令 可將其顯示/關閉
內存信息:m命令 可將其顯示/關閉
退出命令:q
修改刷新時間間隔:s 例如Change delay from 3.0 to 1 改成每隔1秒鐘就刷新一次
終止指定的進程:k 例如PID to signal/kill [default pid = 37553] 7 終止7號進程
選項:
-d #:指定刷新時間間隔,默認爲3秒;
-b:以批次方式顯示;top -b
-n #:顯示多少批次;top -b -n 1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
八、uptime命令
uptime命令:顯示系統時間、運行時長及平均負載;
顯示過去1分鐘、5分鐘和15分鐘的平均負載(等待運行的進程隊列的長度);
例如:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
九、htop命令
htop至關於top的升級版,系統沒有自帶,須要額外安裝,能夠從epel源裏安裝htop程序
1,2表示第1,2顆CPU,Tasks進程總數(用戶空間中),thr線程數量
按F1可查看使用幫助,能夠指定各類方式顯示各進程的相關信息
htop命令:
選項:
-d #:指定延遲時間間隔;
-u UserName:僅顯示指定用戶的進程;
-s COLUME:以指定字段進行排序;
子命令:
l:顯示選定的進程打開的文件列表;
s:跟蹤選定的進程的系統調用;
t:以層級關係顯示各進程狀態;
a:將選定的進程綁定至某指定的CPU核心;
例如:
一、查看postfix用戶的進程信息,鍵入u選擇postfix便可
二、選定37869號進程按l鍵能夠顯示進程打開的文件列表
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
十、vmstat命令
vmstat命令: - Report virtual memory statistics 報告虛擬內存統計數據
vmstat [options] [delay [count]]
procs:
r:等待運行的進程的個數;CPU上等待運行的任務的隊列長度;
b:處於不可中斷睡眠態的進程個數;被阻塞的任務隊列的長度;
memory:
swpd:交換內存使用總量;0表示沒有啓用交換內存,若是swpd很大,一般表示物理內存不足了
free:空閒的物理內存總量;
buffer:用於buffer(緩衝)的內存總量;
cache:用於cache(緩存)的內存總量;
buffer和cache的做用是銜接兩個系統之間速度不匹配而設定的
swap:
si:數據進入swap中的數據速率(kb/s)
so:數據離開swap的速率(kb/s)
si和so活動頻繁時一般也表示物理內存不足了
io:
bi:從塊設備(磁盤)讀入數據到系統的速度(kb/s)
bo:保存數據至塊設備的速率(kb/s)
system:
in:interrupts,中斷速率;平均每秒鐘的終端速度,中斷CPU正在執行的任務
cs:context switch, 上下文切換的速率;即進程被內核調度的頻率
cpu:
us: user space 用戶空間的程序所佔用的CPU的百分比
sy:system 內核空間
id:idle 空閒的
wa:wait 等待IO完成
st: stolen 被虛擬化技術所佔用的百分比
選項:
-s:顯示內存統計數據;
vmstat #:表示每隔多少秒刷新一次
例如:
一、默認以快照顯示當前統計數據
二、vmstat #表示每隔多少秒刷新一次
三、每隔2秒刷新一次,顯示3次後退出
四、顯示內存統計數據
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
十一、pmap命令
pmap命令: - report memory map of a process
pmap [options] pid [...]
-x:顯示詳細格式的信息;
另外一種查看方式:cat /proc/PID/maps
例如:
一、顯示1號進程的詳細信息
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
十二、glances命令
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:是遠程服務器的地址;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1三、dstat命令
dstat命令: - versatile tool for generating system resource statistics
dstat [-afv] [options..] [delay [count]]
經常使用選項:
-c, --cpu:顯示cpu相關信息;
-C #,#,...,total 指定看哪顆CPU
-d, --disk:顯示磁盤的相關信息
-D sda,sdb,...,total 查看指定磁盤
-g:顯示page相關的速率數據;
-m:Memory的相關統計數據
-n:Interface的相關統計數據;
-p:顯示process的相關統計數據;
-r:顯示io請求的相關的統計數據;
-s:顯示swapped的相關統計數據;
--tcp:顯示tcp相關的統計數據;
--udp:顯示udp相關的統計數據;
--raw:顯示raw sockets相關的統計數據;
--socket:顯示socket相關的統計數據;
--ipc:進程間通訊,顯示多個進程間通訊時的統計數據
--top-cpu:顯示最佔用CPU的進程;
--top-io:最佔用io的進程;
--top-mem:最佔用內存的進程;
--top-lantency:延遲最大的進程;
例如:
一、指定2秒鐘刷新一次,一共顯示5次
三、指定查看最佔用CPU和最佔用內存的進程
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1四、kill命令
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:繼續運行進程
19)SIGSTOP:中止,將進程送日後臺
例如:
一、向37805號進程發送15號信號終止其進程,15號信號是默認的發送信號,能夠不加
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1五、killall命令
killall命令: - kill processes by name 根據進程名殺死進程,
killall [-SIGNAL] program
SIGNAL信號和kill的信號相同
例如killall httpd 殺死httpd相關的進程