首先得理解進程的含義,進程不一樣於程序,進程是程序的一次運行實例,當一個程序運行時,就會產生相應的進程,所以,程序是死的,而進程是活的。一個進程能夠包含若干線程,線程能夠幫助應用程序同時作幾件事(好比一個線程向磁盤寫入文件,另外一個則接收用戶的按鍵操做並及時作出反應,互相不干擾),在程序被運行後中,系統首先要作的就是爲該程序進程創建一個默認線程,而後程序能夠根據須要自行添加或刪除相關的線程。shell
進程是由內核進行管理的,內核在正常啓動而且全面接管硬件資源以後,會建立一個Init的進程;而這個名叫init的進程負責用戶空間的進程管理;此外,每一個進程的組織結構是一致的。centos
CentOS5及之前:SysV Init,Classic Init,這種方式有缺陷:在啓動系統時,Init經過寫腳本的方式來建立各個子進程;利用shell來實現,所以其執行速度很是慢;致使系統的啓動速度和進程的建立速度都很是慢;session
CentOS6:upstart,有Ubuntu研發的新型的Init進程;能夠並行的啓動某些有關聯的服務進程,在建立進程的時候,能夠多線建立進程;若是有多個CPU或這有多顆CPU核心的話,其進程的建立速度會有比較明顯的變化;第一個進程名稱仍然是init;
多線程
CentOS7:Systemd,參考了MAC OS的啓動邏輯開發一款新版的init程序;其能夠以其自身獨立完成整個操做系統的啓動工做;也就是說,在開機並加載內核以後,只須要啓動一個systemd進程就能夠將其餘各服務進程啓動起來,從而引導整個系統啓動;
編輯器
由此能夠看出,centos7建立進程的方式是最快的,也就是爲何centos7開機速度快的根本緣由。ide
除了init進程以外,其餘的各個進程都是由其父進程建立的;任何的進程的父子關係都保存在task struct中,每一個子進程的生命週期也由父進程決定,因而會出現一種特殊狀況,就是當父進程「死亡」以後,其子進程會一直存在於內存中,成爲「殭屍」,這對系統來講一定是有害的。ui
每一個父進程經過fork()系統調用,複製自身的數據給子進程使用;這種複製方式不是當即複製,而是寫時複製(CoW);所謂寫時複製,就是隻有進程空間的各段內容要發生改變時,纔會將父進程的內容複製給子進程。centos7
進程的優先級爲0-139中的140個整數,其中1-99爲實時優先級,數字越大優先級越高;在系統啓動時啓動的進程;而100-139爲靜態優先級,數字越小優先級越高;在用戶執行某些應用程序的時候啓動的進程;spa
更改優先級的方法爲使用nice值,nice值的範圍爲-20-19,默認的nice值爲0,只有管理員才能使用負整數的nice值,以提高進程的優先級;而普通用戶只能使用正整數的nice值,以下降進程的優先級;操作系統
進程的類型有如下幾種分類:
按照進程的啓動方式:
守護進程:
Daemon,一般是在系統引導的過程被啓動的,與任何的終端無關;也能夠經過終端啓動;
用戶進程:
用戶登陸到系統以後,經過終端啓動的進程;
按照進程的運行位置:
前臺進程:
在進程啓動以後,進程一直佔用標準輸出或者標準輸入或者同時佔用標準輸出和標準輸入;
後臺進程:
在進程啓動以後,進程不佔用標準輸出和標準輸入;
按照進程對於資源消耗:
CPU-Bond:非交互式的進程;
IO-Bond:編輯器等各類交互式進程;
Linux系統上進程管理的相關命令:
1,pstree,顧名思義,就是將子父進程以樹的方式顯式出來
2,ps,報告一個當前進程的快照,其後接的選項有三種風格,UNIX,BSD,和GNU,如下是各選項的意義:
BSD風格的選項:
a:顯示全部與終端相關的進程;
x;顯示全部與終端無關的進程;
u:顯示發起進程的用戶的帳戶名稱;
經常使用的選項組合之一:aux
ps aux命令顯示的結果中各字段的含義:
USER:進程的全部者
PID:進程標識符
%CPU:進程佔用的CPU處理時間的百分比;
%MEM:進程佔用的物理內存的百分比;
VSZ:虛擬內存集(可交換內存集)
RSS:常駐內存集
TTY:進程與哪一個終端相關;?表示與終端無關;
STAT:
R:running,正在運行的進程;
S:interuptible sleeping,可中斷的睡眠狀態;
D:uninteruptible sleeping,不可中斷的睡眠狀態;Disk Block;
T:Trace/STOPPED,被跟蹤/已中止;
Z:Zombie,僵死態;
+:前臺進程
l:包含多線程的進程
<:高優先級進程
N:低優先級進程
s:session leader,有子進程的父進程;
START:進程開始執行的時候時間戳
TIME:進程累計的CPU佔用時間;
COMMAND:啓動進程的命令行參數;
UNIX風格的選項:
-e:顯示全部進程
-f:顯示完整格式的進程信息
-F:顯示完整格式的進程信息,與-f幾乎相同;
經常使用的選項組合之二:-ef
PPID:父進程PID
C:表示進程佔用的CPU時間的百分比
經常使用的選項組合之三:-eF
SZ:虛擬內存集
RSS:常駐內存集
PSR:表示此進程在哪一個CPU核心上運行;
-H:以層級機構顯示進程的父子關係;
經常使用的選項組合之四:-eFH
o|-o field1,field2,...:以自定義字段的方式顯示進程相關信息;
field:pid, ppid, ni, rtprio, psr, pcpu, stat, comm, user, tty, vsz, rss,...
經常使用的選項組合之五:-eo | axo field1,field2,...
3,pgrep,pkill,根據進程名稱或其餘屬性查看進行或向進程發送信號;
pgrep [options] pattern
pkill [options] pattern
經常使用選項:
-u uid:顯示進程的有效用戶
-U uid:顯示進程的真實用戶
-t TERM:顯示與指定的終端相關的進程
-l:顯示進程名稱
-a:顯示進程的完整的命令行參數
4,pidof,示指定進程名稱對應的進程ID
5,top:
剩下的命令待續!