Linux系統中的幾乎任何行動都會以進程的形式進行。若是你用網絡瀏覽器查看網頁,瀏覽器就做爲進程運行。若是鍵入bash shell的命令行,這個shell就做爲進程運行。若是你用chmod命令來更改文件權限,chmod就做爲單獨的進程來執行。進程是完成工做的形式,linux內核的基本職責就是爲進程提供作事情的地方,不讓彼此撞車。linux
進程是已啓動的可執進程序的運行實例,進程有如下組成部分:
1. 已分配內存的地址空間
2. 安全屬性,包括全部權憑據個特權
3. 程序代碼的一個或多個執行進程
4. 進程狀態
shell
進程與程序區分
程序:二進制文件,靜態。
進程:是程序運行的過程,動態,有生命週期及運行狀態瀏覽器
進程的屬性:
1. 進程ID(PID):是惟一的值,用來區分進程
2. 父進程(PPID)
3. 啓動進程的用戶ID(UID)和所歸屬的組(GID)
4. 進程狀態:分爲運行R,休眠S,殭屍Z
5. 進程執行的優先級
6. 進程所鏈接的終端名
7. 進程資源佔用:如內存、CPU等
緩存
進程(Process)是一個程序在其自身的虛擬地址空間中的一次執行活動。之因此要建立進程,就是爲了使多個程序能夠併發的執行,從而提升系統的資源利用率和吞吐量。安全
程序只是一個靜態的指令集合;而進程是一個程序的動態執行過程,它具備生命期,是動態的產生和消亡的。bash
進程家族
引導系統時,Linux內核的一個職責是啓動第一個進程(一般是/sbin/init)。由於一個業已存在的進程繼續派生,全部其餘進程得以啓動。網絡
孤兒進程
若是說處理子進程終止後的善後事宜是父進程的職責的話,那麼若是父進程在子進程以前終止該怎麼辦?這個子進程就變成了孤兒進程。多線程
殭屍進程
當進程退出,釋放大多數資源和它的父進程收集它的返回值、釋放剩餘資源這兩段時間之間,子進程處於一個特殊狀態,被稱爲殭屍進程(zombie)。每一個進程都會通過一個短暫的殭屍狀態。併發
五種進程狀態命令行
可運行(R) 處於可運行狀態的進程,一旦有機會,就會訪問CPU。多個進程能夠(並且常常)處於能夠運行狀態,可是由於在任何給定時間內只有一個進程能夠在CPU上運行,因此實際上這些進程中只有一個在任何給定的實例上運行。 自願(可中斷的)睡眠(s) 從名稱中能夠看出,處於自願睡眠狀態的進程選擇處於該狀態。一般,這一進程在某事發生以前無事可作。 非自願(不可中斷或強制)睡眠\(D\) 內核迫使進程進入非自願睡眠狀態。該進程並無選擇休眠,它情願運行以便作完事情。當資源被釋放時,內核會喚醒進程並將設置爲可運行狀態。 中止的(掛起的)進程(T) 用戶有時決定掛起進程,被掛起的進程在被用戶從新啓動前不會執行任何操做。 殭屍進程(Z) 每一個快要終止的進程會經歷一個短暫的殭屍狀態,然而有時有些進程會一直停留在殭屍狀態。
ps - report a snapshot of the current processes 語法 ps [options] 命令選項: a: 顯示跟當前終端關聯的全部進程 u: 基於用戶的格式顯示 x: 顯示全部進程,不以終端機來區分 U: 顯示某用戶ID全部的進程 A: 顯示全部程序 e: 此參數的效果和指定」A」參數相同 f: 用ASCII字符顯示樹狀結構,表達程序間的相互關係 o: 自定義輸出格式
ps -aux 輸出解釋
USER: 進程擁有者
PID: pid
%CPU: 佔用的 CPU 使用率
%MEM: 佔用的內存使用率
VSZ: 佔用的虛擬內存大小
RSS: 佔用的內存大小
TTY: 終端的次要裝置號碼 (minor device number of tty)
STAT: 該進程的狀態:
D: 不可中斷的靜止
R: 正在執行中
S: 靜止狀態
T: 暫停執行
Z: 不存在但暫時沒法消除
W: 沒有足夠的內存分頁可分配
<: 高優先序的進程
N: 低優先序的進程
L: 有內存分頁分配並鎖在內存內 (即時系統或捱A I/O)
s 表示進程是控制進程
l 表示進程是多線程
+表示當前進程運行在前臺
START: 進程開始時間
TIME: 執行的時間
COMMAND:所執行的指令
COMMAND中帶[ ]的爲系統建立的進程,直接顯示路徑的爲用戶所建立的進程
top命令
第一行:
當前時間 運行時間 當前登錄系統的用戶數量
load average後面的三個數字分別表示距離如今一分鐘,五分鐘,十五分鐘的負載狀況。
第二行:
Tasks: 165 total -總進程數爲165
1 running -正在運行的進程數
162 sleeping -睡眠的進程數
2 stopped -中止的進程數
0 zombie -殭屍進程數
第三行:
0.3 us -系統用戶進程使用CPU百分比
0.3 sy -內核中的進程佔用CPU百分比
0.0 ni -用戶進程空間內改變過優先級的進程佔用CPU百分比
99.3 id -空閒的CPU百分比
0.0 wa -CPU等待I/O完成的時間總量
0.0 hi -硬中斷佔比
0.0 si -軟中斷佔比
0.0 st -虛擬機佔用物理的時間,例如物理機運行了KVM,則表示KVM佔用物理機的CPU時間
第四行:
Mem: 物理內存
1005480 total -物理內存總量
73036 free -空閒內存總量
446528 used -使用的物理內存總量
485916 buff/cache -內核緩存內存量
第五行:
Swap: 交換內存
2097148 total -交換分區總量
2097148 free -空閒交換分區總量
0 used -使用的交換分區總量
397568 cached -可利用內存總量
第六行:
PID -進程號
USER -進程管理用戶
PR -進程優先級
NI -nice值 負值表示高優先級,正值表示低優先級
VIRT - -虛擬內存
RES -物理內存
SHR -共享內存
S -進程狀態
%CPU -上次更新到如今的CPU時間佔用百分比
%MEM -進程使用的物理內存百分比
TIME+ -進程使用的CPU時間總計,單位1/100秒
COMMAND -進程名稱
top快捷鍵:
s: 默認三秒刷新一次,按s修改刷新時間
空格: 當即刷新
q: 退出
P; 按CPU排序按CPU排序
M: 按內存排序
T: 按時間排序
數字1: 顯示每一個內核的CPU使用率
u/U: 指定顯示的用戶
h: 幫助
kill命令
kill - terminate a process 語法 kill[選項][進程號] 選項 -l 打印信號編號,若果不加信號的編號參數,則使用「-l」參數會列出所有的信號名稱 -a 當處理當前進程時,不限制命令名和進程號的對應關係 -p 只打印相關進程的進程號,而不發送任何信號 -s 指定發送信號
Kill命令工做原理:
向Linux內核發送一個系統操做信號和某個程序的進程標識號,而後系統內核就能夠對進程標識號指定的進程進行操做
信號
HUP 1 重載配置文件
INT 2 中斷(同 Ctrl + C)
QUIT 3 退出(同 Ctrl + )
TERM 15 終止
KILL 9 強制終止
CONT 18 繼續(與STOP相反, fg/bg命令)
STOP 19 暫停(同 Ctrl + Z)
應注意,信號使進程強行終止,這常會帶來一些反作用,如數據丟失或者終端沒法恢復到正常狀態。發送信號時必須當心,只有在萬不得已時,才用kill信號(9),由於進程不能首先捕獲它。要撤銷全部的後臺做業,能夠輸入kill 0。由於有些在後臺運行的命令會啓動多個進程,跟蹤並找到全部要殺掉的進程的PID是件很麻煩的事。這時,使用kill 0來終止全部由當前shell啓動的進程,是個有效的方法。
kill -9 強制結束
kill -0 檢測進程是否存在
killall命令
Linux系統中的killall命令用於殺死指定名字的進程(kill processes by name)
命令格式: killall[選項][進程名] 命令選項: -I 忽略小寫 -g 殺死進程組而不是進程 -i 交互模式,殺死進程前先詢問用戶 -l 列出全部的已知信號名稱 -q 不輸出警告信息 -s 發送指定的信號 -v 報告信號是否成功發送 -w 等待進程死亡 —help 顯示幫助信息 —version 顯示版本顯示 -u:殺死指定用戶的進程 -r:使用正規表達式匹配要殺死的進程名稱 -p:殺死進程所屬的進程組
如何調整優先級
nice命令
nice - run a program with modified scheduling priority 語法 nice [OPTION] [COMMAND [ARG]…] 選項 -n add integer N to the niceness (default 10) 設定一個優先級 默認爲10 linux porcess 優先級爲-20 - 19 數字越小優先級越大 調整優先級命令nice nice --19 ping -c 500 localhost -19優先級 nice -19 ping -c 500 localhost 19優先級
renice命令
renice - alter priority of running processes renice -n -19 -p 16863 renice -n -20 -u root 0 (用戶 ID) 舊優先級爲 -10,新優先級爲 -20
普通用戶只能下降程序的優先級 不能提升程序優先級,root隨便
用nice以優先級爲8運行ping命令
使用 top -b 命令查看ping目前的優先級,爲8級
使用renice更改ping的優先級
更改爲功