概念:進程,一個活動的程序實體的副本,擁有生命週期,一個進程可能包含一個或多個執行流;
進程的建立進程:
每一個進程的組織結構是一致的;
內核在正常啓動而且全面接管硬件資源以後,會建立一個Init的進程;而這個名叫init的進程負責用戶空間的進程管理;
CentOS5及之前:SysV Init,Classic Init
在啓動系統時,Init經過寫腳本的方式來建立各個子進程;利用shell來實現,所以其執行速度很是慢;致使系統的啓動速度和進程的建立速度都很是慢;
CentOS6:upstart,有Ubuntu研發的新型的Init進程;能夠並行的啓動某些有關聯的服務進程,在建立進程的時候,能夠多線建立進程;若是有多個CPU或這有多顆CPU核心的話,其進程的建立速度會有比較明顯的變化;第一個進程名稱仍然是init;
CentOS7:Systemd,參考了MAC OS的啓動邏輯開發一款新版的init程序;其能夠以其自身獨立完成整個操做系統的啓動工做;也就是說,在開機並加載內核以後,只須要啓動一個systemd進程就能夠將其餘各服務進程啓動起來,從而引導整個系統啓動;shell
除了init進程以外,其餘的各個進程都是由其父進程建立的;由fork()系統調用來實現的;
每一個父進程經過fork()系統調用,複製自身的數據給子進程使用;這種複製方式不是當即複製,而是寫時複製(CoW);
終止進程:
當計算機開機的時候,內核(kernel)只創建了一個init進程。Linux內核並不提供直接創建新進程的系統調用。剩下的全部進程都是init進程經過fork機制創建的。新的進程要經過老的進程複製自身獲得,這就是fork。fork是一個系統調用。進程存活於內存中。每一個進程都在內存中分配有屬於本身的一片空間,當進程fork的時候,Linux在內存中開闢出一片新的內存空間給新的進程,並將老的進程空間中的內容複製到新的空間中,此後兩個進程同時運行。session
--------------------------------------------------------------------------------------------------------多線程
進程優先級:
0-139
1-99:實時優先級,數字越大優先級越高;在系統啓動時啓動的進程;
100-139:靜態優先級,數字越小優先級越高;在用戶執行某些應用程序的時候啓動的進程;
nice值:
-20~19:默認的nice值0;
只有管理員才能使用負整數的nice值,以提高進程的優先級;
而普通用戶只能使用正整數的nice值,以下降進程的優先級;
劃分了140個進程隊列;
Big O標準:
O(1),O(logN),O(N),O(N^2),O(2^N)編輯器
進程的類型:
按照進程的啓動方式:
守護進程:
Daemon,一般是在系統引導的過程被啓動的,與任何的終端無關;也能夠經過終端啓動;
用戶進程:
用戶登陸到系統以後,經過終端啓動的進程;
按照進程的運行位置:
前臺進程:
在進程啓動以後,進程一直佔用標準輸出或者標準輸入或者同時佔用標準輸出和標準輸入;
後臺進程:
在進程啓動以後,進程不佔用標準輸出和標準輸入;
按照進程對於資源消耗:
CPU-Bond:非交互式的進程;
IO-Bond:編輯器等各類交互式進程;ide
--------------------------------------------------------------------------------------------------------操作系統
Linux系統上與進程有關的命令(查看命令和管理類命令):
pstree:
pstree - display a tree of processes
ps:
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.命令行
經常使用選項:線程
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,...
... ...