最近想要改變博客風格或者方式,很糾結,不知道怎么想,唉,多看看其他人的再說吧。好了,話不多說,直接進入主題
進程簡介:
我們來一層層分析:之前看到一個感覺比較恰當的比喻,說程序是菜譜,進程是執行程序的過程,就像按照食譜,真正去做菜的過程。計算機根據菜譜做出可口的飯菜。而linux內核的一個重要功能就是為進程提供方便,比如說為進程分配內存空間,管理進程的相關信息等等,就好像是為我們準備好了一個精美的廚房。
所謂的程序(program),就是一系列指令的所構成的集合。所謂指令(instruction)就是比如計算兩個數的和,在內存中尋找地址等這些最基礎的計算機動作。
通過程序,我們可以讓計算機完成復雜的操作。程序大多數時候被存儲為可執行的文件。這樣一個可執行文件就是一個菜譜。
進程(process)是運行中的程序的一個副本,是被載入內存的一個指令集合。
進程的特點:
(1)擁有獨立唯一的進程地址(Process ID ,PID ):用來標記各個進程
(2)存在生命周期,由創建而產生,由調度而運行,由結束而消亡,是一個動態推進、不斷變化的過程。
(3)獨立性:進程是操作系統資源分配、保護和調度的基本單位,每個進程都有其自己的運行數據集,以各自獨立的、不可預知的進度異步運行。進程的運行環境不是封閉的,進程間也可以通過操作系統進行數據共享、通信。
(4)并發性:在同一段時間內.若干個進程可以共享一個CPU。進程的并發性能夠改進系統的資源利用率,提高計算機的效率。進程在單CPU系統中并發執行,在多CPU系統中并行執行。進程的并發執行意味著進程的執行可以被打斷,可能會帶來一些意想不到的結果。
進程知識:
(1)進程格式: task struct :Linux 內核存儲進程信息的數據結構格式(略過,有興趣的可以從內核中了解)
(2)進程之間的聯系:task list :多個任務的的 task struct 組成的鏈表
(3)進程都由其父進程創建,(機制 :CoW (Copy on Write 寫時復制)可以點擊此鏈接了解http://www.cnblogs.com/biyeymyhjob/archive/2012/07/20/2601655.html
那么父父進程又是什么呢,我們可以這樣理解,存在一個上帝進程,是最終極的進程,
在CentOS6:上帝進程也就是第一個進程(PID=1)為:init。CentOS7中上帝進程(PID=1)為:systemd
(4)進程類型:可以分為兩種
守護進程:在系統引導過程中啟動的進程,和終端無關的進程(可以理解為Windows系統中的后臺進程)
前臺進程:通過終端啟動的進程(可以理解為Windows系統中的各種前臺應用進程)
(5)進程狀態:
(6)進程優先級:
系統優先級:數字越小,優先級越高
CentOS4/5中(0-139)
各有140個運行隊列和過期(等待)隊列
CentOS6/7中(0-98)
各有99個運行隊列和過期(等待)隊列
實時(realtime)優先級:99-0 值最大優先級最高
nice優先級值:-20到19,對應系統優先級100-139;nice優先級可以根據具體情況進行動態調整。
進程管理工具:
簡單介紹pstree命令,ps命令,nice/renice命令,pgrep命令,kill命令。
pstree命令:
pstree ?: – display a tree of processes (顯示進程樹)
常用選項:
-p : 顯示進程PID
補充:進程樹中的大括號內容是表示依附于進程的線程(thread)。進程中又分為線程,一個進程至少一個線程,如果是復雜多任務的話可以分多線程,節省內存空間,提高效率。
ps命令:
ps : – report a snapshot of the current processes (報告當前進程的快照即當前進程狀態)
支持三種選項:
UNIX 選項 如-A,-e
BSD 選項 如a
GNU 選項如—help
常用選項:
ps :默認顯示當前終端的前臺進程
僅介紹BSD選項:
a :顯示所有終端的前臺進程
x :顯示終端所有進程(包括守護進程和前臺進程)
u :顯示進程執行者信息(注意:不是顯示進程的發起者信息)
f :層次顯示進程(父子進程)
o :自定義顯示進程的指定屬性(常用屬性:pid,cmd,%cpu,state(狀態),tty,euser(進程生效者),ruser(進程發起者),rss(系統分配的虛擬內存),vsz(實際分配的物理內存),ni(nice優先級),pri(系統優先級),rtprio(realtime優先級),psr(CPU編號))
k :對指定進程的屬性進行排序
常用搭配:ps aux
STAT :表示進程狀態
nice命令:所有用戶都可以以指定的優先級運行命令,這會影響相應進程的調度
選項n:指定優先級(范圍-20到19)
示例:nice -n -10 ping 172.17.0.1 ##以nice優先級為10執行ping命令
renice命令:(只有root用戶可以)調整進程優先級
常用選項:
-P :指定需要調整優先級進程的PID(默認)
-n :指定優先級(范圍-20到19)
-u :指定用戶名稱,修改所有隸屬于該用戶的程序的優先權。
-g :指定群組名稱,修改所有隸屬于該群組的程序的優先權
示例:pgrep命令:搜索進程,支持模式匹配
pgrep [options] pattern
示例:pgrep -a “^ping” ? ? ?##搜索命令以ping開頭的進程
常用選項:
-u :搜索顯示指定執行者的進程
-U :搜索顯示真正發起運行命令者
-t :搜索顯示指定終端相關的進程
-P PID:搜索顯示指定進程的子進程
-v :顯示與搜索條件不符合的程序
-l :顯示搜索到的進程名
-a :顯示完整格式的進程名
示例:pgrep -au magedu
pgrep -au 1000 (切記:u后面直接跟用戶名或uid 不可再跟選項,o選項也是ruci)
補充:pidof命令:(查找正在運行的進程的PID)
示例:pidof bash
? ? ? ? ? ? pidof httpd
kill命令:向進程發送控制信號,以實現對進程管理,每個信號對應一個數字
信號名稱以SIG 開頭(可省略),不區分大小寫
查看當前系統可用信號可用kill -l或者trap –l命令
常用信號:
1) SIGHUP :無須關閉進程而讓其重讀配置文件
2) SIGINT :中止正在運行的進程;相當于Ctrl+c
3) SIGQUIT :相當于ctrl+\
9) SIGKILL :強制殺死正在運行的進程
15) SIGTERM :終止正在運行的進程
18) SIGCONT :繼續運行
19) SIGSTOP :后臺休眠
指定信號的方法:
(1) 信號的數字標識:1, 2, 9
(2) 信號完整名稱:SIGHUP可簡寫名稱為:HUP
kill命令用法:
按PID :kill [-SIGNAL] pid …
示例:kill PID ? ?##“殺死”指定PID的進程
kill -n [SIGNAL] PID ? ##向指定PID的進程發送某一信號
按名稱:killall [-SIGNAL] comm…
示例:killall ping ? ##“殺死”命令ping的進程
kill vim ?##“殺死”命令vim的進程
按模式:pkill [options] pattern (pgrep 與 kill的結合,選項與pgrep相似)
示例:pkill -t pts/2 ? ?##“殺死”終端為pts/2的所有進程
pkill “^ping” ?##“殺死”命令以ping開頭的進程
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/86695