1. 進程相關概念
a. 應用程序被用戶提請給內核,並得以執行便變成了進程,進程只是被調入內存的應用程序的一個副本。
b. 進程都具有統一的數據結構稱爲task struct用於存儲進程的元數據信息,如進程的名稱、PID、優先級等,也就是ps 命令看到的那些進程屬性字段,應用程序被提請給內核變爲進程後,該應用程序對應進程的父進程就會複製一份自己的task struct,給
2. 進程內存管理
a. CPU中指令分爲普通指令和特權指令,用戶空間的應用進程就都可以執行普通指令,特權指令只能被內核執行
b. 用戶空間
c. 內核空間
3. 進程優先級
Ø 對於進程數量來說CPU計算資源是有限的,如果沒有一套有效的資源分配機制進程就會出現爭搶資源的現象,爲了確保進程高效穩定有序的運行,操作系統設計了140個隊列並將進程分別放入這140個隊列之間,通通調度策略爲隊列中的進程分配CPU資源,使得所有進程能夠按系統規定的制度有序運行。這裏的資源分配機制有兩個重要的術語:隊列和調度策略
Ø 進程優先級 :Linux操作系統爲提供了140個隊列來調度進程使用CPU資源,隊列就是我們常說的進程優先級,進程優先級的取值範圍是0-139,值越小優先級越高,優先級按取值範圍還分爲實時優先級和非實時優先級
Ø 進程優先級調整 :
ü 嚴格來講優先級對用戶來說是不可以修改的,用戶只能通過nice值來干預靜態優先級
ü 實時優先級:能過內核動太調整也稱爲動態優先級,取值範圍0-99,用戶不可以過通nice值調整,但可以通過其它命令調整。
ü 非實時優先級:用戶可以過程nice值來干預非實時優先級也稱爲靜態優先級,取值範圍100-139。
ü nice值:nice值的取值範圍是:-20到19,分別對應非實時優先級的100-139,因此nice越小優先級越高。僅管理員可以調低nice值,普通用戶不能調低nice值。
□ 調整原理:一個進程啓動默認nice值爲0,對應優先級爲120,調整後的優先級=當前優先級+nice值,因此用戶以指定nice值啓動進程就可以達到調整優先級的效果。
□ nice進程具備繼承性,子進程繼承父進程
ü 調整優先級:
ü nice以指定nice值啓動進程:nice -n -5 ping 192.168.39.2
ü renice修改已運行進程的優先級:renice -n -5 `pidof ping`
Ø 調度策略:操作系統如何爲隊列內的進程分配CPU資源,操作系統提供了5種調度策略來管理隊列內的進程,通過命令chrt可以查看和修改每個進程進的調度策略
ü 實時進程調度策略:SCHED_FIFO(先進先出調度算法)、SCHED_RR(默認策略,以時間片輪詢調度,一個時間片爲100ms)
ü 非實時進程調度策略:SCHED_OTHER, SCHED_IDLE,SCHED_BATCH
4. 命令選項風格:
Ø Unix/Posix風格
ü 命令後的選項,可以分組,便必須以連字符開頭,如ps -aux。
ü 選項無需加參數的,可以組合在一起,如:sed -n -r 可以寫成 sed -nr
Ø BSD風格,即命令後的選項,不可以與連字符同用,多個選項可以分組輸寫
Ø GNU風格
ü 即長選項,命令後的參數,可以分組,但必須以雙橫線開頭,如:ps --help。
ü 命令行選項以兩個連字符'--'開頭,後跟選項名稱,選項後面使用空格或者等號 緊接着取值
5. 查看進程樹
a. pstree -p顯示進程名後附加PID
b. pstree -u顯示進程名後附加用戶名
c. {}代表線程
6. 基於程序名查詢進程編號
a. pidof 進程名
7. 進程查詢工具ps命令
Ø BSD風格選項
ü ps 不加任何選項則僅顯示當前登錄會話shell環境下的進程列表
ü ps a 選項包括所有終端中的進程
ü ps x 選項包括不鏈接終端的進程(顯⽰當前⽤戶所運⾏的所有進程,包括前臺和後臺守護進程)
ü ps u 選項顯示進程所有者的信息
ü f 選項顯示進程樹,相當於 --forest
ü k|--sort 屬性 對屬性排序,屬性前加- 表示倒序
ü o 基於進程struck數據結構中的屬性字段 定製顯示的字段信息
ü L 顯示支持的進程屬性字段列表 (該選項下列出的進程屬性字段可以供o選項字制顯示輸出)
ü 實例:利用o選項字制顯示字段,並結合k選項基於指定字段排序,如基於%mem字段排序
ü ps o pid,%cpu,%mem,size k %mem
ü
Ø UNIX風格
ü -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的子進程
ü -t ttylist 指定tty,相當於 t
ü -M 顯示SELinux信息,相當於Z
Ø PS命令輸出字段
ü USER :進程執行用戶
ü PID:進程ID
ü %CPU:CPU利用率
ü %MEM:內存利用率
ü VSZ:內核承諾分配給進程的虛似存內存(KB)
ü RSS:進程佔用的真正物理內存(KB)
ü TTY:終端號 ?號與終端無關的
ü STAT:進程狀態
ü START:進程啓動到PS命令查詢時所使用的時間
ü TIME:進程實際佔用CPU運行的時間(獲取的時間分)
ü COMMAND:進程執行的命令行
ü EUESR:進程生效用戶effect user(例:passwd被設置了SUID權限,則在進程發起者執行的進程實際生效用戶上下文件爲passwd文件所屬組的)
ü RUSER:進程的發起者real user
Ø STAT進程狀態
ü R 處理運行狀態,正在被CPU執行或在可執行隊列中的進程處於該狀態
ü S 處於睡眠狀態(Sleep可中斷睡眠)等待事件或信號觸發喚醒,S狀態進程task_struct結構被放入對應事件的等待隊列中,一旦事件觸發則會被喚醒
ü D 處於深度睡眠狀態(Deep sleep不可中斷睡眠)
ü T 暫停狀態或跟蹤狀態,
ü Z 僵死狀態,
ü X 死亡狀態,
ü Z: zombie
ü +: 前臺進程
ü l: 多線程進程
ü L:內存分頁並帶鎖
ü N:低優先級進程
ü <: 高優先級進程
ü s: session leader,會話(子進程)發起者
8. 進程的信號干預:
Ø kill可以向進程發送信息,干預進程的運行狀態
Ø 常用信號,kill -l可以查看系統支持的所有信號,Linux中共有64種信號,信號功能介紹:man 7 signal查看幫助,kill -l {1..64} 查看對應信號名稱
ü 1號SIGHUP:無須關閉進程而讓進程重新讀取配置文件Systemctl reload選項就是服務進程發送HUP信號使進程重新加載配置文件
ü 2號SIGINT:interrupt中止,打斷正在運行的進程,相當於Ctrl+c
ü 3號SIGQUIT 相當於ctrl+\ ,不是真正結進程,發送 SIGQUIT 信號給前臺進程組中的所有進程,終止前臺進程並生成 core 文件
ü 9號SIGKILL:強制殺死運行中的進程,不管理進程是否完成讀寫操作,會丟失進程數據,打開的文件可能會被損壞。一般應對僵死態或死亡態的進程
ü 15號SIGTERM:終止正在運行的進程,會給進程轉儲緩存數據的機會。如果kill不加任何信號則默認會發送第15號信號。
ü 18號SIGCONT:喚醒後臺休眠的進程繼續運行,此時在後臺運行,在進程所有的終端會話下使用fg命令可以恢復到前臺運行。bg命令就是向進程發送18號信號
ü 19SIGSTOP:將正在運行的進程轉入後臺休眠,相當於Ctrl+z ,Stopped暫停
Ø 進程前後臺切換
ü Ctrl+z將前臺運行的進程轉入後臺休眠(可以看到會提示[#]+ Stopped,#表示任務號,可以通過fg、bg發前18號信號喚醒任務),在進程所有的終端會話下使用fg命令可以恢復到前臺運行。相當於向後進程發送第19號信號SIGSTOP
ü fg將後臺任務轉到前臺:jobs查看後臺休眠及運行任務,使用fg加上任務編號即可前後臺任務放到前臺運行,相當於向後臺進程發送第18號信號SIGCONT
ü bg將前臺任務轉到後臺:bg即可以將前臺任務轉到後臺運行,也可以喚醒後臺休眠的任務,相當於向進程發前第18號信號SIGCONT
ü Ctrl+c 中止前臺運行的任務
ü Ctrl+d 不是發送信號,而是表示一個特殊的二進制值,表示 EOF
ü Ctrl+\ 發送 SIGQUIT 信號給前臺進程查並不執行並生成 core 文件,如ping命令想看
Ø 信號的表示方式:
ü 信號的數字標識;例:1,2,3,
ü 信號的完整名稱,以SIG後加信號名稱簡寫,例:SIGHUP,SIGINT,QUIT
ü 信號的簡寫名稱;例:HUP,INT,QUIT
Ø 基於進程名殺死所有進程
ü killall 進程名:例:killall httpd
Ø 基於模式搜索進程
ü pgrep:
ü 語法:pgrep [options] pattern
ü 選項:
-u uid: effective user,生效者
-U uid: real user,真正發起運行命令者
-t terminal: 與指定終端相關的進程
-l: 顯示進程名
-a: 顯示完整格式的進程名
-P pid: 顯示指定進程的子進程
ü 實例: ü pkill
Ø 向進程發送信號
ü 語法:kill -s [信號] pid 注:-s可以省略,而直接用-加上信號再指定PID即可。
ü 例:四種不同的發送信號的方法
Ø kill -9 `pidof ping`
Ø kill -HUP `pidof ping`
Ø kill -SIGHUP `pidof ping`
Ø kill -s 9 `pidof ping`
進程管理
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.