程序通常是放置在磁盤中的,經過用戶的執行來觸發。出發後會被加載到內存中成爲一個個體,就是進程。
內核的功用:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等
Process: 運行中的程序的一個副本,是被載入內存的一個指令集合 進程ID(Process ID,PID)號碼被用來標記各個進程
UID、GID、和SELinux語境決定對文件系統的存取和訪問權限, 一般從執行進程的用戶來繼承
存在生命週期
task struct:Linux內核存儲進程信息的數據結構格式
task list:多個任務的的task struct組成的鏈表
進程建立: init:第一個進程 父子關係
進程:都由其父進程建立,CoW fork(), clone()
進程:程序在一個數據集上的一次運行過程。是操做系統資源分配的基本單位。
線程:是進程中的一個實體,是被操做系統獨立調度和執行的基本單位。一個進程包含一個或多個線程。
做業是向計算機提交任務的任務實體,
而進程是執行實體,是資源分配的基本單位,
線程是處理機調度的基本單位。
進程特徵 mysql
動態性:進程的實質是程序在多道程序系統中的一次執行過程,進程是動態產生,動態消亡的。
併發性:任何進程均可以同其餘進程一塊兒併發執行
獨立性:進程是一個能獨立運行的基本單位,同時也是系統分配資源和調度的獨立單位;
異步性:因爲進程間的相互制約,使進程具備執行的間斷性,即進程按各自獨立的、不可預知的速度向前推動
結構特徵:進程由程序、數據和進程控制塊三部分組成。
多個不一樣的進程能夠包含相同的程序:一個程序在不一樣的數據集裏就構成不一樣的進程,能獲得不一樣的結果;可是執行過程當中,程序不能發生改變。
進程的狀態和轉換
進程執行時的間斷性,決定了進程可能具備多種狀態。事實上,運行中的進程可能具備如下三種基本狀態。
1)就緒狀態(Ready):
進程已得到除處理器外的所需資源,等待分配處理器資源;只要分配了處理器進程就可執行。就緒進程能夠按多個優先級來劃分隊列。例如,當一個進程因爲時間片用完而進入就緒狀態時,排入低優先級隊列;當進程由I/O操做完成而進入就緒狀態時,排入高優先級隊列。
2)運行狀態(Running):
進程佔用處理器資源;處於此狀態的進程的數目小於等於處理器的數目。在沒有其餘進程能夠執行時(如全部進程都在阻塞狀態),一般會自動執行系統的空閒進程。
3)阻塞狀態(Blocked):
因爲進程等待某種條件(如I/O操做或進程同步),在條件知足以前沒法繼續執行。該事件發生前即便把處理機分配給該進程,也沒法運行。ios
運行狀態(Running):當一個進程正在處理機上運行時。
就緒狀態(Ready):一個進程得到了除處理機以外的一切所需資源,一旦獲得處理機便可運行.
等待狀態又稱阻塞狀態(Blocked):一個進程正在等待某一事件而暫停運行時。如等待某資源,等待輸入/輸出完成。
建立狀態(NEW):一個進程正在被建立,還沒被轉到就緒狀態以前的狀態。
結束狀態(Exit):一個進程正在從系統中消失時的狀態,這是由於進程結束或因爲其餘緣由所致使。nginx
運行——>就緒:1,主要是進程佔用CPU的時間過長,而系統分配給該進程佔用CPU的時間是有限的;2,在採用搶先式優先級調度算法的系統中,當有更高優先級的進程要運行時,該進程就被迫讓出CPU,該進程便由執行狀態轉變爲就緒狀態。
就緒——>運行:運行的進程的時間片用完,調度就轉到就緒隊列中選擇合適的進程分配CPU
運行——>阻塞:正在執行的進程因發生某等待事件而沒法執行,則進程由執行狀態變爲阻塞狀態,如發生了I/O請求
阻塞——>就緒:進程所等待的事件已經發生,就進入就緒隊列
如下兩種狀態是不可能發生的:
阻塞——>運行:即便給阻塞進程分配CPU,也沒法執行,操做系統在進行調度時不會從阻塞隊列進行挑選,而是從就緒隊列中選取
就緒——>阻塞:就緒態根本就沒有執行,談不上進入阻塞態算法
查看進程ps [OPTION]...sql
支持三種選項:
UNIX選項 如-A -e
BSD選項 如a
GNU選項 如--help
• 選項:默認顯示當前終端中的進程
• a 選項包括全部終端中的進程
• x 選項包括不連接終端的進程
• u 選項顯示進程全部者的信息
• f 選項顯示進程樹,至關於 --forest
• k|--sort 屬性 對屬性排序,屬性前加- 表示倒序
• o 屬性… 選項顯示定製的信息 pid、cmd、%cpu、%mem
• L 顯示支持的屬性列表
ps常見選項
-C cmdlist 指定命令,多個命令用,分隔
-L 顯示線程
-e: 顯示全部進程,至關於-A
-f: 顯示完整格式程序信息 -F: 顯示更完整格式的進程信息
-H: 以進程層級格式顯示進程相關信息
-u userlist 指定有效的用戶ID或名稱
-U userlist 指定真正的用戶ID或名稱
-g gid或groupname 指定有效的gid或組名稱
-G gid或groupname 指定真正的gid或組名稱
-p pid 顯示指pid的進程
--ppid pid 顯示屬於pid的子進程
-M 顯示SELinux信息,至關於Z
ps輸出屬性
STAT:進程狀態
R:running
S: interruptable sleeping
D: uninterruptable sleeping
T: stopped
Z: zombie
+: 前臺進程
l: 多線程進程
L:內存分頁並帶鎖
N:低優先級進程
<: 高優先級進程
s: session leader,會話(子進程)發起者
ps經常使用組合:
aux
-ef
-eFH
-eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm
axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
ps示例apache
查詢你擁有的全部進程: ps -x 顯示指定用戶名(RUID)或用戶ID的進程: ps -fU apache ps -fu 4 顯示指定用戶名(EUID)或用戶ID的進程: ps -fu wang ps -fu 1000 查看以root用戶權限(實際和有效ID)運行的每一個進程: ps -U root -u root 列出某個組擁有的全部進程(實際組ID:RGID或名稱): ps -fG nginx 列出有效組名稱(或會話)所擁有的全部進程: ps -fg mysql ps -fG 27 經過進程ID來顯示所屬的進程: ps -fp 1234 以父進程ID來顯示其下全部的進程,如顯示父進程爲1154的全部進程: ps -f --ppid 1234 顯示指定PID的多個進程: ps -fp 1204,1239,1263 要按tty顯示所屬進程: ps -ft pst/0 ps示例 以進程樹顯示系統中的進程如何相互連接: ps -e --forest 以進程樹顯示指定的進程 ps -f --forest -C sshd ps -ef --forest | grep -v grep | grep sshd 要顯示一個進程的全部線程,將顯示LWP(輕量級進程)以及NLWP(輕量級進 程數)列: ps -fL -C nginx 要列出全部格式說明符: ps L 查看進程的PID,PPID,用戶名和命令: ps -eo pid,ppid,user,cmd 使用其PID查找進程名稱: ps -p 1244 -o comm= 要以其名稱選擇特定進程,顯示其全部子進程: ps -C sshd,bash
pstree:顯示進程樹centos
pidof:查詢指定進程的PID緩存
pgrep:搜索指定的進程安全
uptime:查看系統的基本負載狀態bash
top:實時監控系統狀態工具
交互按鍵:
選項:
[root@rhel6 ~]# top -n1 -b top - 03:06:25 up 10:41, 1 user, load average: 0.00, 0.01, 0.05
top - 系統時間 up 啓動了多長時間 用戶 負載:(1,5,10)分鐘的平均負載 Tasks: 132 total, 1 running, 131 sleeping, 0 stopped, 0 zombie
總進程數 正在運行進程數 睡眠進程數 中止態進程數 殭屍進程數 Cpu(s): 0.2%us, 0.5%sy, 0.0%ni, 99.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Cpu(s):用戶空間使用率 系統空間使用率 nice值 空閒率 等待率 硬中斷率 軟中斷率 被偷走的時間(分配給虛擬機中的進程的時間片) Mem: 1004136k total, 452340k used, 551796k free, 40868k buffers Swap: 2097148k total, 0k used, 2097148k free, 263940k cached
總內存大小 已使用 空閒內存 緩存使用 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 19356 1552 1232 S 0.0 0.2 0:00.89 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
htop(epel):top的加強版,界面更友好,支持鼠標點擊
iotop:用來監視磁盤I/O使用情況
選項:
交互按鍵:
Total DISK READ: 673.43 M/s | Total DISK WRITE: 0.00 B/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
線程ID(按p可切換PID) 優先級 用戶 讀速度 寫速度 swap所佔率 IO等待率 進程名 15330 be/4 root 673.43 M/s 0.00 B/s 0.00 % 2.07 % dd if=/dev/sda of=/dev/null 1 be/4 root 0.00 B/s 0.00 B/s 0.00 % 0.00 % init
nice -n nice值 CMD:指定運行時的nice值
renice -n nice值 CMD:調整運行中進程的nice值
vmstat:查看虛擬內存狀態
[root@centos7 ~]# vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 0 0 574860 2080 260516 0 0 105 37 165 179 0 1 99 0 0
iostat:統計CPU和設備IO信息
dstat:系統資源統計工具
pmap PID:查看進程對應的內存映射 == cat /proc/PID/maps
glances(epel):調用遠程主機上的系統運行狀態信息
[root@centos7 ~]# yum -q -y install glances #安裝glances軟件包 [root@centos7 ~]# glances -s -B 192.168.0.7 & #啓動服務並監聽端口 [root@centos7 ~]# glances -c 192.168.0.7 #客戶端鏈接
釋放buff/cache空間
echo 1 > /proc/sys/vm/drop_caches
kill:向進程發送控制信號
經常使用信號:man 7 signal
pkill -n #:向進程發送信號,支持模式匹配,用法和pgrep類似
killall -n # CMD:向進程發送指定信號
jobs:顯示當前終端全部的做業
g [[%]JOB_NUM]:把指定的後臺做業調回前臺
bg [[%]JOB_NUM]:讓送日後臺的做業在後臺繼續運行
當咱們在執行一個時間比較長的前臺任務(如:壓縮大文件,編譯內核等),若是途中網絡中斷會致使咱們的任務執行中斷,此時爲了不這種狀況建議採起如下操做: