Linux下進程管理簡概
目錄
Linux內核功能簡述
進程相關概念
進程管理查看工具
一.Linux內核功能簡述
1.進程管理
內核負責創建和銷毀進程, 並處理它們與外部世界的聯系(輸入和輸出). 不同進程間通訊(通過信號, 管道, 或者進程間通訊原語)對整個系統功能來說是基本的, 也由內核處理. 另外, 調度器, 控制進程如何共享 CPU, 是進程管理的一部分. 更通常地, 內核的進程管理活動實現了多個進程在單個或者幾個 CPU 之上的抽象
2.內存管理
計算機的內存是主要的資源, 處理它所用的策略對系統性能是至關重要的. 內核為所有進程的每一個都在有限的可用資源上建立了一個虛擬地址空間. 內核的不同部分與內存管理子系統通過一套函數調用交互, 從簡單的 malloc/free 到更多更復雜的功能.
3.文件系統
Linux 在很大程度上基於文件系統的概念; 幾乎 Linux 中的任何東西都可看作一個文件. 內核在非結構化的硬件之上建立了一個結構化的文件系統, 結果是文件的抽象非常多地在整個系統中應用. 另外, Linux 支持多個文件系統類型, 就是說, 物理介質上不同的數據組織方式.
4.設備控制
幾乎每個系統操作最終都映射到一個物理設備上. 除了處理器, 內存和非常少的別的實體之外, 全部中的任何設備控制操作都由特定於要尋址的設備相關的代碼來進行. 這些代碼稱為設備驅動. 內核中必須嵌入系統中出現的每個外設的驅動, 從硬盤驅動到鍵盤和磁帶驅動器.
5.網絡
網絡必須由操作系統來管理, 因為大部分網絡操作不是特定於某一個進程,進入系統的報文是異步事件,報文在某一個進程接手之前必須被收集,識別,分發. 系統負責在程序和網絡接口之間遞送數據報文, 它必須根據程序的網絡活動來控制程序的執行. 另外, 所有的路由和地址解析問題都在內核中實現.
二.進程相關概念
1.進程
Process:是運行中的程序的一個副本,被載入內存的一個指令集合,有生命周期,都由其父進程創建
進程ID:被用來標記各個進程
task struct:Linux內核存儲進程信息的數據結構格式,是固定格式
task list:多個任務的的task struct組成的鏈表
2.進程優先級0-139
0:一般不使用
1-99:實時優先級;數字越大優先級越高,系統自動安排
100-139:靜態優先級;數字越小優先級越高,可手動更改
3.Nice值
-20至19,對應於100到139或99
普通用戶只能將自己的優先級調低,root用戶可以隨意調制
每個隊列有兩對:運行隊列、過期隊列,140對280隊,通過CPU中斷控制來給進程運行時間
4.進程內存
Page Frame: 頁框,用存儲頁面數據,存儲Page 4k
MMU:Memory Management Unit負責轉換線性和物理地址
進程在內存上的存儲單元可能是不連續的
LRU:Least Recently Used 近期最少使用算法,釋放內存 物理地址空間和線性地址空間
假設序列為 4 3 4 2 3 1 4 2 物理塊有3個,則
第1輪 4調入內存 4
第2輪 3調入內存 3 4
第3輪 4調入內存 4 3
第4輪 2調入內存 2 4 3
第5輪 3調入內存 3 2 4
第6輪 1調入內存 1 3 2
第7輪 4調入內存 4 1 3
第8輪 2調入內存 2 4 1
IPC:Inter Process Communication進程間通信
同一主機上:signal信號、shm: shared memory共享內存、semerphor旗語手勢
不同主機上:rpc: remote procecure call遠程過程調用、socket套接字
5.進程類型
守護進程: daemon,在系統引導過程中啟動的進程,和終端無關進程
前臺進程:跟終端相關,通過終端啟動的進程
註意:也可把在前臺啟動的進程送往後臺,以守護模式運行
6.進程狀態
運行態:running,進程占用CPU,並在CPU上運行;
就緒態:ready,進程已經具備運行條件,但是CPU還沒有分配過來;
可中斷睡眠態:處於這個狀態的進程因為等待某某事件的發生(比如等待socket連接、等待信號量),而被掛起。這些進程的task_struct結構被放入對應事件的等待隊列中。當這些事件發生時(由外部中斷觸發、或由其他進程觸發),對應的等待隊列中的一個或多個進程將被喚醒。
不可中斷睡眠:進程處於睡眠狀態,但是此刻進程是不可中斷的。不可中斷,指的並不是CPU不響應外部硬件的中斷,而是指進程不響應異步信號。絕大多數情況下,進程處在睡眠狀態時,總是應該能夠響應異步信號的。但是有延遲
可中斷:interruptable
不可中斷:uninterruptable,不可中斷,指的並不是CPU不響應外部硬件的中斷,而是指進程不響應異步信號。
停止態:暫停於內存中,但不會被調度,除非手動啟動之;stopped
僵死態:zombie,結束進程,父進程結束前,子進程不關,不可被kill, 即不響應任務信號, 無法用SIGKILL殺死
7.進程分類
CPU-Bound:cpu密集型,對CPU占用大,非交互式
IO-Bound:io密集型,對io占用大,交互式
三.進程管理查看工具(pstree,ps,pgrep)
Linux系統各進程的相關信息均保存在/proc/PID目錄下的各文件中
1.pstree:進程樹查看
pstree常用選項:-p,打印進程PID
2.ps:查看當前進程狀態
ps -ef:以完整格式顯示所有的進程信息(-e:顯示所有進程,-f:顯示完整格式的進程信息)
說明
UID:啟動進程用戶
PID:運行進程號
PPID:父進程的進程號,0在內核啟動init之前存在,init啟動後終止,存在過渡,一般為swap的進程
C:cpu utilization,CPU的占用百分比
STIME:啟動時間
TTY:與其終端相關
TIME:累計運行CPU時間
CMD:啟動此進程的命令
ps -eFH:樹狀層級結構顯示(-H:以層級(樹狀)結構顯示進程的相關信息)
F比f顯示的信息更加全面,層級結構顯示,縮進相同同層級
PSR:運行在哪顆CPU上,十進制編號,0/1/2/3
3.pgrep:
pgrep命令以名稱為依據從運行進程隊列中查找進程,並顯示查找到的進程id。每一個進程ID以一個十進制數表示,通過一個分割字符串和下一個ID分開,默認的分割字符串是一個新行。對於每個屬性選項,用戶可以在命令行上指定一個以逗號分割的可能值的集合。
pgrep -U root:顯示以root用戶身份運行的進程的ID(-U UID:僅顯示由指定用戶身份運行的進程PID)
Linux下進程管理簡概