process
運行中的程序的一個副本,是被載入內存的一個指令集合 進程ID(Process ID,PID)號碼被用來標記各個進程 UID、GID、和SELinux語境決定對文件系統的存取和訪問權限, 通常從執行進程的用戶來繼承 存在生命周期 task struct:Linux內核存儲進程信息的數據結構格式 task list:多個任務的的task struct組成的鏈表
進程和線程的區別
進程和線程的主要差別在于它們是不同的操作系統資源管理方式。進程有獨立的地址空間,一個進程崩潰后,在保護模式下不會對其它進程產生影響,而線程只是一個進程中的不同執行路徑。線程有自己的堆棧和局部變量,但線程之間沒有單獨的地址空間,一個線程死掉就等于整個進程死掉,所以多進程的程序要比多線程的程序健壯,但在進程切換時,耗費資源較大,效率要差一些。但對于一些要求同時進行并且又要共享某些變量的并發操作,只能用線程,不能用進程。 1) 簡而言之,一個程序至少有一個進程,一個進程至少有一個線程. 2) 線程的劃分尺度小于進程,使得多線程程序的并發性高。 3) 另外,進程在執行過程中擁有獨立的內存單元,而多個線程共享內存,從而極大地提高了程序的運行效率。 4) 線程在執行過程中與進程還是有區別的。每個獨立的線程有一個程序運行的入口、順序執行序列和程序的出口。但是線程不能夠獨立執行,必須依存在應用程序中,由應用程序提供多個線程執行控制。 5) 從邏輯角度來看,多線程的意義在于一個應用程序中,有多個執行部分可以同時執行。但操作系統并沒有將多個線程看做多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和線程的重要區別。
進程創建
init:第一個進程 父子關系 進程都由其父進程創建 fork(), clone()
進程優先級
系統優先級:數字越小,優先級越高 0-139: 1-99:實時優先級 100-139:靜態優先級 數字越小,優先級越高 nice值:-20到19,對應系統優先級100-139或99 Big O:時間復雜度,用時和規模的關系 O(1), O(logn), O(n), O(n^2), O(2^n)
進程內存
Page Frame:頁框,用存儲頁面數據,存儲Page 4k LRU:Least Recently Used 近期最少使用算法,釋放內存物理地址空間和線性地址空間 MMU:Memory Management Unit負責轉換線性和物理地址
進程之間的通信
我們知道在計算機網絡體系當中,主機與主機之間通信,實質上是主機進程與主機進程之間的通信,也就是進程間的通信(IPC.Inter Process Communication). 當兩個進程在同一臺主機上時:進程間通信科依靠signal(信號指令)、shm(shared memory共享內存空間)、semerphor(旗語,類似飛機起飛時的旗幟語言)來完成。 當兩個進程不在同一臺主機上時:進程間通信可以依靠rpm(remote procedure call遠程過程調用)、socket(套接字)
進程類型
根據進程與系統終端的關系可將進程分為:守護進程和前臺進程 守護進程:在系統引導過程中啟動的進程,即跟終端無關的進程 前臺進程:跟終端相關,通過終端啟動的進程,需要注意的是,也可以把前臺啟動的進程送往后臺,以守護模式運行 根據進程占用資源的大小可以將進程分為:CPU密集型和IO密集型 CPU密集型是對cpu占用率高的進程 IO密集型是等待I/O時間長的進程
進程狀態
1.Running(運行態):正在運行當中的進程 2.ready:就緒態 3.睡眠態:sleeping 可中斷睡眠:interruptable 不可終端睡眠:uninterruptable 4.停止態(Stopped):暫停于內存中,但不會被調度,除非手動啟動 5.僵死態(Zombie):孤魂野鬼,找不到歸宿,父進程不來收尸或父進程已經掛了
管理進程常用命令
pstree命令
pstree - display a tree of process
ps命令
report a snapshot of the current processes. 三種選項風格: UNIX:必須帶- BSD:必須無- GNU:長選項 啟動進程的方式: 系統啟動過程中自動啟動:與終端無關的進程 用戶通過終端啟動:與終端相關的進程 選項: a:所有與終端相關的進程 x:所有與終端無關的進程 u:以用戶為中心組織進程狀態信息顯示 常用組合之一:aux 每個字段的含義: USE:進程的發起者 PID:進程ID %CPU:進程所占用的CPU百分比 %MEM:進程所占用的內存百分比 VSZ:進程所占用的虛擬內存空間大小 RSS:進程所占用的實際內存空間大小 TTY:此進程運行在哪個終端,pts/n表示遠程終端,tty表示本地終端,?表示系統進程 STAT:進程的狀態 R:Running態 S:Interruptable,可中斷睡眠 D:Uninterruptable,不可終端睡眠 T:Stopped,停止態 Z:Zombie,僵死態 s:Session leader,會話領導者 +:前臺進程 l:多線程進程 <:高優先級進程 N:低優先級進程 START:進程的啟動時間 TIME:進程實際占用的CPU時間 COMMAND:觸發此進程的命令程序 -e:顯示所有進程 -f:顯示完整格式的進程信息 常用組合之二:-ef 每個字段的含義: UID:進程的發起者 PID:進程ID PPID:父進程的PID C:占用CPU的百分比 STIME:進程的啟動時間,從什么時候開始啟動的 TTY:進程在哪個終端運行 TIME:進程實際花費的CPU時間 CMD:觸發此進程的命令 -F:顯示完整格式的進程信息 C:cpu utilization PSR:運行于哪顆CPU -H:以層級結構顯示進程的相關信息 常用組合之三:-eFH 常用組合之四:exo 自定義要顯示的字段 常用的有pid,ni,ppid,command,pri,psr,pcpu,stat,tty,rtprio,euser,ruser... ni:nice值 pri:priority,優先級 rtprio:real time priority,實時優先級
pgrep命令
look up or signal processes based on name and other attributes pgrep [OPTIONS] pattern -U USER:只顯示以指定用戶身份運行的進程 -t TERMINAL:與指定的終端相關的進程 -l:顯示進程名 -a:顯示完整格式的進程名 -P pid:顯示此進程的子進程
pkill命令
可以按照進程名稱殺死進程 -o:僅向找到的最?。ㄆ鹗迹┻M程號發送信號; -n:僅向找到的最大(結束)進程號發送信號; -P:指定父進程號發送信號; -g:指定進程組; -t:指定開啟進程的終端。
pidof命令
根據指定的命令所啟動的進程ID pidof PROGRAM
top命令
display Linux processes 常用選項: -d #:指明延遲時長,單位為秒 -b:批次顯示 -n #:顯示的批次數量 每一行代表的含義為: 第一行: 1.當前的系統時間 2.系統啟動到現在所經過的時間 3.當前已經登錄到系統的用戶 4.系統在1,5,15分鐘的平均負載,值越小表示系統越空閑 第二行: 顯示的目前進程的總量與個別程序在什么狀態(running,sleeping,stopped,zombie)比較需要注意的是最后的zombie的那個數值,如果不是0就需要查看下是哪個進程處于僵尸狀態 第三行: 顯示的是CPU的整體負載,如果是多核心的cpu,可以按下數字1來切換不同CPU的負載率 us:user space用戶空間所占用的CPU百分比 sy:kernel,內核空間所占用的CPU百分比 ni:改變過優先級的進程所占用的CPU百分比 id:空閑CPU百分比 wa:wait io,等待I/O所花費的時間 hi:硬件中斷所消耗的百分比 si:軟件終端所消耗的百分比 st:被虛擬機偷走的百分比 第四行:表示物理內存空間的使用情況 第五行:表示交換分區的使用情況 子命令: P:以占據CPU百分比排序顯示 M:以占據內存百分比排序顯示 T:累計占用CPU時間排序顯示 l:是否顯示負載均衡行 t:是否顯示進程摘要信息及CPU負載狀態 1:數字1,平均或單獨顯示CPU的負載狀態 m:是否顯示內存相關的狀態信息 q:退出命令 k:終止指定進程 s:修改延遲時長 top下面的部分: PID:每個進程ID USER:進程所屬的使用者 PR:priority簡寫,進程的優先級,越小優先級越高 NI:nice的簡寫,與Priority有關,也是越小越早被運行 VIRT:進程需要的虛擬內存大小,而非使用的虛擬內存大小 RES:進程當前使用的內存大小,不把包括swap SHR:進程與其他進程共享的內存大小 S:進程的狀態 %CPU:進程所占用的CPU百分比 %MEM:進程所占用的內存百分比 TIME+:CPU使用時間的累加 COMMAND:觸發此進程的命令
uptime命令
顯示系統時間、運行時長及平均負載 過去1分鐘、5分鐘和15分鐘的平均負載 等待運行的進程隊列的長度
htop命令
top升級版,默認情況下沒有安裝,需要配置EPEL源來進行安裝 支持的選項: -d #:延遲時長 -u USERNAME:僅顯示指定用戶的進程 -s COLUMN:根據指定的字段進程排序 子命令: l:顯示光標所在進程所打開的文件列表 s:顯示貫標所在進程執行的系統調用 a:綁定進程到指定的CPU #:快速定位光標至PID為#的進程上
vmstat命令
Report virtual memory statistics vmstat [options] [delay [count]] procs:進程相關 r:等待運行的進程個數;隊列長度 b:處理不可中斷睡眠狀態的進程的個數 memory:內存相關 swpd:交換內存使用量 free:物理內存空間使用量 buffer:用于buffer的內存總量 cache:用于cache的內存總量 swap:交換分區相關 si:數據進入swap的速率(kb/s) so:數據離開swap的速率(kb/s) io:I/O相關 bi:從設備讀入數據到系統的速率(kb/s) bo:保存數據至塊設備的速率(kb/s) system: in:中斷速率,每秒被中斷的次數 cs:進程切換的速率 cpu: us:user space用戶運行程序占用CPU的百分比 sy:system用于運行內核占用CPU的百分比 id:idle空閑CPU百分比 wa:wait I/O花費時間 st:被虛擬機偷走的百分比 常用選項: -s:顯示內存的統計數據
pmap
進程對應的內存映射 pmap [OPTIONS] pid [...] -x:顯示詳細格式 示例:pmap 1 另一種實現方式: cat /proc/PID/maps
系統監控工具
glances
A cross-platform curses-based monitoring tool 需要EPEL源 常用選項: -b:以Byte為單位顯示網絡數據速率 -d:關閉磁盤I/O模塊 -m:關閉mount模塊 -n:關閉network模塊 -t #:刷新時間間隔 -1:每個cpu的相關數據單獨顯示 -o {HTML|CSV}:輸出格式 -f /PATH/TO/SOMEDIR:設定輸出文件的位置 C/S模式下運行glances命令: 服務模式: glances -s -B IPADDR IPADDR:本機的某地址,用于監聽 客戶端模式: glances -c IPADDR IPADDR:是遠程服務器的地址
dstat命令
versatile tool for generating system resource statistics dstat [-afv] [options..] [delay [count]] 常用選項: -c, --cpu:顯示cpu相關信息 -C#,#,...,total -d, --disk:顯示磁盤的相關信息 -D sda,sdb,...,total -g:顯示page相關的速率數據 -m:Memory的相關統計數據 -n:Interface的相關統計數據 -p:顯示process的相關統計數據 -r:顯示io請求的相關的統計數據 -s:顯示swapped的相關統計數據 --tcp:顯示tcp套接字的相關數據 --udp:顯示udp套接字的相關數據 --raw:顯示raw套接字的相關數據 --socket: --ipc:顯示進程間通信相關的速率數據 --top-cpu:顯示最占用CPU的進程 --top-io:最占用io的進程 --top-mem:最占用內存的進程 --top-lantency:延遲最大的進程
管理進程
kill命令
terminate a process 用于向進程發送信號,以實現對進程的管理 顯示當前系統可用信號: kill -l 每個信號的表示方法有三種: 1)信號的數字標識 2)信號完整名稱 3)信號的簡寫名稱 向進程發信號: kill [-s signal|-p] [-q sigval] [-a] [--] pid... 常用信號: 1)SIGHUP:無需關閉進程讓其重讀配置文件 2)SIGINT:終止正在運行的進程,相當于Ctrl+c 9)SIGKILL:強行殺死所指定的進程 15)SIGTERM:終止一個進程,默認kill命令不跟選項則使用此選項 18)SIGOUT:繼續運行進程 19)SIGSTOP:暫停進程,把進程放置于后臺,相當于Ctrl+z
killall
終止一個進程 killall [-SIGNAL] program
作業管理
jobs命令
查看當前系統作業 -l:顯示進程ID 前臺作業(foregroud):通過終端啟動,且啟動后會一直占據終端 后臺作業(backgroud):可以通過終端啟動,但啟動后即轉入后臺運行(釋放終端) 如何讓作業運行于后臺? (1)運行中的作業 Ctrl+z 注意:送往后臺后,作業會轉為停止態 (2)尚未啟動的作業 # COMMAND & 注意:此類作業雖然被送往后臺,但其依然與終端相關;如果終端終止,與終端相關的進程將被終止; 如果希望把送往后臺的作業剝離與終端的關系 # nohup COMMAND & 可實現作業控制的常用命令: fg [[%]JOB_NUM]:把后臺作業調回前臺 bg [[%]JOB_NUM]:讓送往后臺的作業在后臺繼續運行 kill %JOB_NUM:終止指定的作業
調整進程優先級
可通過nice值調整的優先級范圍:100-139 分別對應于:-20, 19 進程啟動時,其nice值默認為0,其優先級為120 nice命令: 以指定的nice值啟動并運行命令 nice [OPTION] [COMMAND [ARGU]...] 選項: -n NICE 注意:只有管理員才可調低nice值 renice命令: renice [-n] NICE PID... 查看Nice值和優先級: ps axo pid,ni,priority,command | grep COMMAND
原創文章,作者:zhai796898,如若轉載,請注明出處:http://www.www58058.com/45036