在操做系統系統中,進程是一個很是重要的概念。linux
1、Linux中進程的相關知識編程
一、什麼是進程呢?api
通俗的來講進程是運行起來的程序。惟一標示進程的是進程描述符(PID),在linux內核中是經過task_struck和task_list來定義和管理進程的。緩存
二、進程的分類網絡
1)根據在linux不一樣模式下運行分爲:session
核心態:這類進程運行在內核模式下,執行一些內核指令(Ring 0)。多線程
用戶態:這類進程工做在用戶模式下,執行用戶指令(Ring 3)。負載均衡
若是用戶態的進程要執行一些核心態的指令,此時就會產生系統調用,系統調用會請求內核指令完成相關的請求,就執行的結果返回給用戶態進程。tcp
2)按照進程的狀態可分爲:ide
運行態:running 正在運行的進程
可中斷睡眠態:進程處於睡眠狀態,可是能夠被中斷
不可中斷的睡眠態:進程處於睡眠狀態,可是不能夠被中斷
中止態:stoped 不會被內核調度
僵死態:zombie產生的緣由是進程結束後,它的父進程沒有wait它,所致使的。
3)按照操做的密集程度
CPU密集型:進程在運行時,佔用CPU時間較多的進程。
I/O密集型:進程在運行時,佔用I/O時間較多的進程。
一般狀況下,I/O密集型的優先級要高於CPU密集型。
4)按照進程的處理方式
批處理進程:
交互式進程:
實時進程:
三、進程的優先級
進程的有優先級,是用0-139數字來表示的,數字優先級從小到大依次是:0-99,139-100。
優先級分爲2類:
實時優先級:0-99,是由內核維護的
靜態優先級:100-139,可使用nice來調整,nice值的取值範圍是[-20,19),分別對應100到139。nice默認值是0。
動態優先級:由內核動態維護,動態調整。
2、進程的管理工具
一、pstree命令 查看進程數。 經常使用用法以下:
二、ps 命令 查看進程的相關狀態。支持SysV和BSD兩種風格的選項。
經常使用選型:
a 與終端相關的進程
x 與終端無關的進程
u 顯示運行進程的用戶
經常使用組合選項:ps aux
# 下面分別來講明上圖的各個字段的含義 # USER 進程以什麼用戶身份運行 # PID 進程描述符 具備惟一性 # %CPU 進程運行時所佔的cpu百分比 # %MEM 進程運行時內存所佔的百分比 # VSZ Virtual memory SiZe 虛擬內存使用大小 # RSS 常駐內存集,全部不能被置換出去的內存集 # STAT 表示內存狀態 # 經常使用的狀態有: # S:可中段睡眠狀態 # R:運行態 # D:不可中斷睡眠態 # T:中止態 # Z:殭屍態 # s:session leader 所謂進程的領導者 # +:表示是前臺進程 # l:多線程進程 # N:低優先級進程 # <:高優先級進程 # TTY 用來表示終端 顯示爲「?」的說明是與終端無關的進程 # START 進程開始時間 # TIME 進程運行時間 # COMMAND 執行進程的命令 若是命令被 "[]"包圍,說明是內核線程
-e 顯示全部進程
-f 顯示完成格式信息
常組合在一塊兒使用:ps -ef
可是有些這種狀況下,咱們的命令有時候顯示不完整
此時想要顯示完成就要 ps -efww
-F:顯示額外信息
-H:顯示進程的層次結構
經常使用組合方式:ps -eFH
可能之後咱們用到最多的選項:
-o 咱們能夠自定義顯示字段
# 經常使用的有: # pid command psr pri ni %cpu %mem rsz vsz等
三、pgrep,pidof
pgrep 經常使用選型:
-U 查看指定用戶的進程號
-G 查看指定用戶組的進程號
-l 顯示進程名和進程號
pidof:只顯示已啓動進程的PID
[root@server ~]# pidof httpd # 沒啓動的進程不顯示 [root@server ~]# pidof man 5283
四、top命令
實時監控系統資源
# 執行top命令後,進入交互式模式
# top中的一些交互式命令: # l:控制是否顯示第一行,負載均衡信息 # t:控制是否顯示進程信息由和cpu信息 # m:控制是否顯示內存,交換信息 # I 或者 1(數字):是否分別顯示cpu每一個信息 # M: 按%mem排序顯示,從大到小 # k: kill 殺掉進程 # s:修改默認刷新時間 默認是3秒 # 下面解釋擡頭信息: top - 21:35:17 up 10:03, 4 users, load average: 0.00, 0.00, 0.00 # 系統時間 啓動時間 登陸用戶數 負載均衡:1min 5min 15min # 何爲系統負載?在這裏指的是等待在進程隊列裏的平均進程數 # 此出顯示的信息 等價於 uptime 命令 Tasks: 165 total, 1 running, 164 sleeping, 0 stopped, 0 zombie # 進程總數 運行數 睡眠態數 中止態數 殭屍進程數 Cpu(s): 0.0%us,0.0%sy, 0.0%ni, 100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st # 0.0%us:user space:用於運行用戶空間的程序所佔的cpu百分比 # 0.0%sy:system space:用於運行內核空間的程序所佔的cpu百分比 # 0.0%ni:nice值調用時間所佔cpu百分百比 # 100.0%id:系統cpu空閒所佔百分比 # 0.0%wa:用於等待I/O所佔的cpu百分比 # 0.0%hi:硬中斷所佔cpu百分比 # 0.0%si:軟中斷所佔cpu百分比 # 0.0%st:系統被「偷走」的cpu所佔的百分比,通常指的是用於虛擬機運行所佔的cpu Mem: 1012548k total, 396328k used, 616220k free, 99444k buffers # 總內存大小 使用的內存大小 剩餘內存大小 緩存的大小 Swap: 2097144k total, 0k used, 2097144k free, 144156k cached # 交換分區總大小 使用的 剩餘的 緩衝大小 # 此處顯示的信息等價於 free 命令
經常使用選項:
-d #: 指定刷新時間間隔
-b: 以批次的方式顯示top的刷新
-n #: 顯示的批次
例如:top -d 4 -b 2 -n 3
四、htop
htop命令是top命令的升級版,不管是在功能上仍是在界面顯示上,都比top命令更勝一籌。
u: 交互式選擇顯示指定用戶的進程
l: 顯示光標所在進程所打開的文件列表
s: 顯示光標所在進程執行的系統調用
a: 綁定進程到指定的CPU
#:快速定位光標至PID爲#的進程上
下圖是htop的界面。這個工具比較強大,用法功能比較多,在這裏先作簡單介紹。之後筆者會專門寫htop的博客。
五、vmstat
wmstat 查看虛擬使用狀況
# 經常使用用法: # vmstat 顯示信息會默認1秒刷新一次,一直顯示 # vmstart -n 2 顯示信息會2秒刷新一次,一直顯示 # vmstat -n 1 4 顯示信息會1秒刷新一次,刷新4次 [root@server ~]# vmstat -n 1 1 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 614392 100468 144776 0 0 2 1 6 5 0 0 100 0 0 # 咱們解釋一下每一個字段的含義: # procs字段 關於進程的 # r 指運行隊列的進程數,若是過長,多是cpu性能較低 # b 阻塞隊列的長度,一般是用於等待I/O的完成。若是太大,說明I/O性能較低 # memory字段 關於內存使用的 # swap 使用的交換內存大小 # free 空餘內存大小 它的值=總大小-buff-cache-used # buff 緩衝大小,目的是爲了加速I/O的寫操做(通常是磁盤) # cache 緩存大小,摸底是爲了加速I/O的讀操做(通常是磁盤) # swap字段 說明交換內存 # si swapin 指的是數據進入交換內存的速率 單位:KB/s # so swapout 指的是數據出交換內存的速率 單位:KB/s # 若是這2個值比較大的時候,會出現抖動現象。建議增長內存 # io字段 I/O的說明 # bi:Block in 從塊設備讀入內存的速率 KB/s # bo: block out 保存到塊設備的速率 KB/s # 這就是咱們一般說的磁盤的讀寫性能,能夠經過RAID提升。 # system字段 關於系統的 # in: interruppt 中斷髮生的速率 # cs: 上下文切換的速率(進程調度) # cpu字段 說明cpu的使用狀況 # us:user space:用於運行用戶空間的程序所佔的cpu百分比 # sy:system space:用於運行內核空間的程序所佔的cpu百分比 # id:系統cpu空閒所佔百分比 # wa:用於等待I/O所佔的cpu百分比,這是因爲cpu和i/o速度相差太多所形成的 # st:系統被「偷走」的cpu所佔的百分比,通常指的是用於虛擬機運行所佔的cpu的時間百分比
六、nice,renice
調整進程的優先級。
nice 在進程啓動的時候設置優先級。
# 經常使用參數: # -n NICE 例如:nice -n 3 httpd # 通常狀況下,nice值是負值的設定通常有管理員來設定。普通用戶只能設置nice爲正值。 # 若是不指定 -n 參數,默認的nice值是10
renice 從新設置已啓動進程的優先級。
# 經常使用選項是: # -n NICE 從新設定nice的值 # -p PID 設定進程的PID
七、kill,killall
對於有Linux C編程經驗的人來講,咱們知道IPC通訊方式之一就是經過信號量(signal),那麼對於kill和killall命令來講,它們與信號量有着很大的關係,或者說kill,killall命令經過信號量讓咱們能夠手動的向進程傳遞信號來控制進程。
常見的信號量以下:
[root@server ~]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX # 咱們經常使用到的信號是: # 1 SIGHUP 在不關閉進程的狀況下,重讀配置文件。ngnix在這方面作得至關的好,甚至能夠實如今線升級。 # 2 SIGINT 中斷信號 至關於 ctrl + C # 9 SIGKILL 暴力殺死 # 15 SIFTERM 優雅的關閉 默認是這種狀況 # kill用法以下: # kill [-SIGNAL] PID # 對於SIGNAL有三種表示:例如:1) -9 -15 -1 -2 2)-SIGKILL -SIGHUP -SIGTERM 3) -HUP -KILL -TERM -INT 等。 # # killall是殺掉一類進程 # 例如:killall httpd 等價於 kill `pidof httpd`
八、jobs,bg,fg
什麼是做業呢?做業就是許多進程一塊兒協同完成一項具體的工做。做業有前臺做業和後臺做業2種。
使用 & 或者 ctrl + Z能夠把一個進程打入後臺。
# ping 192.168.0.1 & # 這樣打入後臺的運行的做業,退出終端的時候,做業就會終止。 # 使用 nohup 命令可避免這個問題 # nohup ping 192.168.0.1 & # 可使用jobs命令查看後臺的做業 # 每一個做業都有一個做業號來標識做業 # 做業控制命令 # bg [[%]JOB_NUM]: 讓送日後臺的做業繼續在後臺運行 # fg [[%]JOB_NUM]: 將後臺做業調回前臺 # kill %JOB_NUM: 終止指定的做業
九、dstat命令,查看各類狀態信息
用法:dstat [-afv] [options..] [delay [count]]
經常使用參數 | 具體意義 |
-c | 顯示cpu統計數據,若有多個CPU彙總統計 |
-d | 顯示disk統計數據,若有多塊磁盤則彙總統計 |
-D DEVICE | 顯示特定磁盤的信息 |
-g | 顯示page信息(具體什麼是page以及他的做用,會在之後內存調優博客中具體說明) |
-i | 顯示中斷的統計數據 |
-m | 顯示內存的統計信息 |
-l | 顯示系統的負載信息 |
-n | 顯示網絡接口的相關屬性 |
-s | 顯示系統屬性 |
-N INTER_FACE_NAME | 顯示特定接口的屬性 |
-s | 顯示交換內存的屬性 |
-p | 顯示進程隊列 |
--ipc | 顯示ipc消息隊列、信號量和共享內存的使用情況 |
-a | 等價於 -cdngy 顯示CPU,磁盤,網卡,page,系統屬性 |
-f | 以完整格式顯示全部信息, |
--tcp,--udp | 顯示tcp,udp狀態信息 |
更多參數查看 man 手冊。
示例:
十、查看內存映射
pmap PID 查看對應進程的內存映射,經常使用的用法是:pman `pidof PROCESS_NAME`。固然這些信息也能夠查看 /proc/PID/pmap 文件查看。
十一、glances命令
一款強大的系統監控工具:能實時監控像cpu,meomory,load,swap,Network,mount,disk等信息。
其餘功能的使用,請使用 h 來獲取幫助。因爲此工具比較強大,所以這裏者簡單的介紹,後期會於 htop 工具作專門的介紹。