1、進程linux
linux進程概念:session
進程是一個執行中的程序的實例(副本),全部系統上運行的數據都會以進程的類型存在。進程是計算機科學中最深入最成功的概念之一。進程提供給應用程序的關鍵抽象是:多線程
1.一個獨立的邏輯控制流,它提供一個假象,好像咱們的應用程序獨佔地使用處理器。app
2.一個私有的地址空間,它提供一個假象,好像咱們的程序獨佔地使用存儲器系統。ssh
每一個進程都有一個惟一的數字標識符,稱爲進程 ID ,它老是一個非負整數。使用 top, htop 等工具就能夠看到操做系統當前的進程列表,而且會按照必定的指標進行排序。socket
一個老進程會成爲新進程的父進程,那麼新進程就是老的進程的子進程。一個進程除了有一個PID以外,還會有一個PPID來存儲的父進程 PID。全部進程的源頭是 init 進程,即全部的進程會構成一個以 init (CentOS7下是systemd)爲根的樹狀結構。tcp
進程狀態:ide
運行狀態:進程正在運行或在運行隊列中等待運行 。
可中斷等待狀態:進程正在等待某個事件完成(如等待數據到達),等待過程當中能夠被信號或定時器喚醒。
不可中斷等待狀態:進程正在等待某個事件完成而且等待中不能夠被信號或定時器喚醒,必須一直等待到事件發生。
僵死狀態:進程已終止,但進程描述符依然存在,直到父進程調用wait()函數後釋放。
中止狀態:進程由於收到SINSTOP,SIGSTP,SIGTIN,SGIOU信號後中止運行或者該進程正在被跟蹤。函數
2、經常使用命令
工具
2)ps命令:
/proc/:內核中的狀態信息;
內核參數:模擬成文件系統類型;
可設置其值從而調整內核運行特性的參數;/proc/sys/
狀態變量:其用於輸出內核中統計信息或狀態信息,僅用於查看;
每一個進程都在/proc/目錄下有個以PID號命名的子目錄,目錄中存放了當前進程的各類狀態參數。
啓動進程的方式:
系統啓動過程當中自動啓動:與終端無關的進程;
用戶經過終端啓動:與終端相關的進程,關閉終端其子進隨之關閉;
ps經常使用選項:
a 全部與終端相關的進程;
x 全部與終端無關的進程;
u以用戶爲中心組織進程狀態信息顯示;
經常使用組合一:ps aux
VSZ: 虛擬內存集;
RSS: 常駐內存集(不能放到交換內存中的);
TTY: 終端類型
STAT: 當前進程的狀態
R running 運行中
S 可中斷睡眠
D 不可中斷睡眠
T 中止狀態
Z 僵死狀態
+ 前臺進程(運行於終端之上且佔據着命令提示符)
l 多線程進程
N 低優先級進程
< 高優先級進程
s session leader 一個會話的引導着
ps -e :顯示全部進程
ps -f :顯示完整格式的進程信息
經常使用組合:ps -ef
PPID:父進程的進程號
C : cpu的佔用百分比
STIME:啓動時間
TIME:累計運行時間
ps -F:顯示完整格式的進程信息;
PSR:運行於哪顆cpu上
ps -H: 以層級機構顯示進程的相關信息;
經常使用組合三:ps -eFH
經常使用組合四:ps -eo, axo
o後邊跟可用參數,即要顯示的字段列表,以逗號隔開
ps axo pid,ni,psr,pcpu,stat,comm,tty 等
ni:nice值;
pri:priority, 優先級;
rtprio:real time priority,實時優先級;
3)pgrep,pkill命令:進程過濾
pgrep [options] pattern
-u uid:effective user有效的用戶進程
-U uid:read user 某用戶啓動的進程,只顯示進程號
-t TERMINAL:與指定的終端相關的進程;
-l:顯示進程名;
-a:顯示完整格式的進程名;
-P pid:顯示此進程的子進程;
pidof命令:
根據進程名,取其pid;
4)top命令:
字段含義:PR 優先級
NI nice指
VIRT 虛擬內存集
RES 常駐內存集
SHR 共享內存空間
S 當前狀態
顯示排序方式: P 以佔用CPU百分比排序;
M 以佔據內存百分比排序;
T 以累計佔用CPU時間排序;
首部信息:uptime信息:l命令
tasks及cpu信息:t命令
內存信息:m命令
單個cpu佔用顯示 1
退出命令:q
修改刷新時間間隔:s
終止指定的進程:k
經常使用選項:
-d #:指定刷新時間間隔,默認爲3秒;
-b:以批次方式顯示;
-n #:顯示多少批次;
5)htop命令:
選項:
-d #:指定延遲時間間隔;
-u UserName:僅顯示指定用戶的進程;
-s COLUME:以指定字段進行排序;
子命令:
l:顯示選定的進程打開的文件列表;
s:跟蹤選定的進程的系統調用;
t:以層級關係顯示各進程狀態;
a:將選定的進程綁定至某指定的CPU核心;
6)vmstat命令:vmstat 2 5 兩秒顯示一次共顯示5次
各字段含義:
proc
r:等待運行的進程個數,cpu上等待運行的任務的隊列長度(cpu性能);
b:處於不可中斷睡眠狀態的進程個數,被阻塞的任務隊列的長度(I/O性能);
memory
swpd:交換內存的使用總量;(查看內存)
free:空閒的物理內存總量;
buffer:用於buffer的內存總量;
cache:用於cache的內存總量;(解決兩個設備速度不對等)
swap
si:數據進入swap中的數據速率(kb/s)
so: 數據離開swap的速率(kb/s)
io
bi:從塊設備讀入數據到系統的速度(kb/s)
bo: 保存數據至塊設備的速率(kb/s)
sysytem
in:中斷速率,每秒幾個
cs:上下文切換的速率
cpu
us:用戶空間
sy:內核空間
id:空閒的空間
wa:等待i/o
st:被虛擬化偷走的空間
vmstat -s :顯示內存統計數據
7)dstat命令:
dstat [-afv] [options..] [delay [count]]
經常使用選項:
-c, --cpu:顯示cpu相關信息;
-C #,#,...,total
-d, --disk:顯示磁盤的相關信息
-D sda,sdb,...,tobal
-g:顯示page相關的速率數據;
-m:Memory的相關統計數據
-n:Interface的相關統計數據;
-p:顯示process的相關統計數據;
-r:顯示io請求的相關的統計數據;
-s:顯示swapped的相關統計數據;
顯示 --tcp 、--udp、--raw、--socket 、--ipc 相關信息
--top-cpu:顯示最佔用CPU的進程;
--top-io:最佔用io的進程;
--top-mem:最佔用內存的進程;
--top-latency:延遲最大的進程
8)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:
killall命令:
- kill processes by name
killall [-SIGNAL] program