?
目錄
一.進程的基本信息
1.1進程的定義
1.2進程的特征
1.3進程的組成
1.4線程產生的背景?
1.5線程的定義
1.6進程與線程的區別?
?1.7進程的類別
1.8進程的優先級?
1.8.1進程優先級的概念
1.8.2PRI和NI
?1.9僵尸進程
? 1.9.1僵尸進程的定義
1.9.2僵尸進程產生的原因
1.9.3如何解決僵尸進程
二.查看進程?
2.1靜態查看進程信息 ps命令
2.1.1ps aux
2.1.2ps -le
2.1.3ps -l
2.1.4ps -ef?
?2.1.4 -o的使用
2.1.5? [選項]--sort的使用?
2.2動態查看進程信息 top命令?
2.2.1top命令顯示的界面的組成
2.2.2top命令的選項
2.2.3top命令的交互界面
2.3 以樹狀結構顯示當前系統中運行的進程 pstree
2.4?查看指定的進程信息?
2.4.1根據PID查程序名 prtstat
2.4.2根據程序名查PID?pgrep和pidof
2.5?監控系統資源 vmstat
1. Procs(進程)
2. Memory
3. Swap(交換分區)
4. I/O(磁盤)
5. System(系統)
6. CPU
?三:進程的前后臺調度?
?3.1區別
3.2前臺和后臺程序的切換?
四:結束進程?
4.1kill
4.2killall
五.計劃管理工具
5.1計劃管理工具的定義
5.2at命令
5.2.1定義
5.2.2格式
5.2.3例子
5.3crontab工具?
5.3.1定義
5.3.2格式
六.怎么查看操作系統的五大性能
一.進程的基本信息
1.1進程的定義
運行中的程序的一個副本,是被載入內存的指令集合,是資源分配的單位。
1.2進程的特征
動態性:進程是程序的一次動態執行過程,具有生命周期(創建、運行、終止)。
并發性:任何進程都可以同其他進程一起并發執行。
獨立性:進程是系統進行資源分配和調度的一個獨立單位。
結構性:由程序、數據集合和進程控制塊(PCB)三部分組成。
1.3進程的組成
- 程序:用于描述進程要完成的功能,是控制進程執行的指令集。
- 數據集合:是程序在執行時所需要的數據和工作區。
- 程序控制塊(Program Control Block,簡稱PCB):包含進程的描述信息和控制信息,是進程? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?存在的唯一標志。
1.4線程產生的背景?
早期操作系統中,進程是資源分配和調度的最小單位。但隨著應用復雜度提升,進程切換的開銷(如內存隔離、上下文保存)成為性能瓶頸,因此引入了更輕量的線程概念。
1.5線程的定義
線程是程序執行中一個單一的順序控制流程,是程序執行流的最小單元,是處理器調度和分派的基本單位。一個進程可以有一個或多個線程,各個線程之間共享程序的內存空間。
1.6進程與線程的區別?
-
線程是程序執行的最小單位,而進程是操作系統分配資源的最小單位
-
一個進程由一個或多個線程組成,線程是一個進程中代碼的不同執行路線
-
進程之間相互獨立,但同一進程下的各個線程之間共享程序的內存空間
-
進程只接收任務, 不處理任務,線程才是干活的那個
題目
如何確定一個程序 ?是多線程 還是 單線程?
grep -i threads /proc/[PID]/status # 查看指定進程的線程數
prtstat [PID] # 顯示進程詳細信息
?1.7進程的類別
-
守護進程:完全脫離終端;獨立于用戶會話運行,系統重啟或顯式終止才會結束。
-
前臺進程:?直接與用戶終端(如命令行界面)綁定,接收用戶輸入并實時輸出結果;生命周期與終端會話綁定,終端關閉時進程會被終止;與守護進程相比,前臺進程可能被系統分配更高優先級以保證響應速度。
1.8進程的優先級?
1.8.1進程優先級的概念
進程優先級是操作系統調度資源的依據,決定了進程獲取CPU時間的順序。優先級越高,進程越容易被調度執行。
1.8.2PRI和NI
在?Linux?系統中,表示進程優先級的有兩個參數:Priority 和 Nice
-
PRI(Priority):直接表示進程優先級,數值越小優先級越高。
-
NI(Nice):調整PRI的修正值,范圍通常為?20到19。通過
nice
值可間接影響優先級,例如:PRI新值=PRI原值+NI值
NI值為負時提高優先級,為正時降低優先級。
ps axo pid,comm,ni //查看[root@centos8 ~]#nice -n -10 ping 127.0.0.1//將進程的 nice值 設為 ?10[root@centos7 ~]#renice -n -20 2118//將進程的nice值調整為 -20//注意:普通用戶只能調高 NI 值,而不能降低,只有 root 用戶才能設定進程 NI 值為負值
?1.9僵尸進程
? 1.9.1僵尸進程的定義
僵尸進程是指?已經終止運行(Exit),但其退出狀態(Exit Status)尚未被父進程(Parent Process)回收?的進程。在 Linux/Unix 系統中,僵尸進程仍然占用一個?進程表項(Process Table Entry)。
1.9.2僵尸進程產生的原因
僵尸進程的產生主要有?兩個根本原因,都與?父進程未能正確處理子進程的退出狀態?有關
-
子進程終止后,父進程沒有調用?
wait()
?或?waitpid()
?來讀取子進程的退出狀態 -
?父進程異常終止,未正確移交子進程給?
init
1.9.3如何解決僵尸進程
[root@centos7 ~]#bash //進入子 Shell[root@centos7 ~]#echo $BASHPID //打印當前Bash shell的進程ID(這里是1809)
1809
[root@centos7 ~]#echo $PPID //打印其父進程ID(這里是1436)
1436
#將父進程設為停止態
[root@centos7 ~]#kill -19 1436 //殺死子進程,使其進入僵尸態[root@centos7 ~]#kill -9 1809 //向當前shell(1809)發送SIGKILL信號(9),強制終止當前shell[root@centos7 ~]#ps aux //查看進程狀態,檢查是否有僵尸進程,STAT為Z,表示為僵尸態[root@centos7 ~]#kill -18 1436 //若是父進程未調用 wait()而產生的僵尸進程,則向父進程(1436)發 送SIGCONT信號(18),恢復被暫停的父進程[root@centos7 ~]#kill -9 1436 //若父進程異常終止未傳遞子進程,則向父進程(1436)發送SIGKILL 信號(9),強制終止父進程[root@centos7 ~]#ps aux //再次觀察,可以發現僵尸態的進程不存在了
二.查看進程?
2.1靜態查看進程信息 ps命令
ps 即 process state,是用于查看當前運行的進程信息的命令。
格式:ps [選項]
選項 | 功能 |
-a | 顯示當前終端下的所有進程信息,包括其他用戶的進程。與“x”選項結合時將示系統中所有的進程信息。 |
-u | 使用以用戶為主的格式輸出進程信息。 |
-x | 顯示當前用戶在所有終端下的進程信息。 |
-e | 顯示系統內的所有進程信息。 |
-l | 使用長(Long)格式顯示進程信息。 |
-f | 使用完整的(Full)格式顯示進程信 |
[選項]--sort? | 對屬性排序,屬性前加 - 表示倒序 |
?-o | 用于?自定義輸出,允許你只顯示特定的進程信息字段 |
2.1.1ps aux
顯示系統中所有用戶的進程
?了解
TTYtty1 ~ tty7 代表本地控制臺終端(可以通過 Alt+F1 ~ F7 快捷鍵切換不同的終端)
tty1~tty6 是本地的字符界面終端
tty7 是圖形終端
pts/0 ~ 255 代表虛擬終端,一般是遠程連接的終端,第一個遠程連接占用 pts/0,第二個
遠程連接占用 pts/1,?代表和終端無關
STAT 組合狀態示例
狀態碼 解釋
Ss 會話領導者(如 bash),處于可中斷睡眠狀態。
Rl 多線程進程(如 java),正在運行或可運行。
D< 高優先級的不可中斷睡眠進程(如內核磁盤 I/O 操作)。
S+ 前臺進程(如 vim),處于可中斷睡眠狀態。
Z 僵尸進程(需父進程調用 wait() 回收資源)。
2.1.2ps -le
可以查看系統中所有的進程,而且還能看到進程的父進程的 PID 和進程優先級
?了解:
F ?值 | 含義 |
---|---|
0 | 普通進程,無特殊標志。 |
1 | 進程剛被?fork() ?但尚未執行新程序(如?bash ?啟動的子進程)。 |
4 | 進程以 root 權限運行(如?sudo ?啟動的進程)。 |
40 | 進程是會話領導者(如?sshd ?或終端 shell)。 |
41 | 會話領導者 + 剛?fork() (如?sshd ?新創建的會話)。 |
100 | 進程被調試器(如?gdb )附加。 |
2.1.3ps -l
只能看到當前 Shell 產生的進程
2.1.4ps -ef?
要注意區分與ps aux的區別
ps -ef
?是?UNIX System V 風格?的命令格式,與?BSD 風格(如?ps aux
)形成鮮明對比
3. 與 BSD 風格(ps aux
)的關鍵區別
對比項 | UNIX 風格(ps -ef ) | BSD 風格(ps aux ) |
---|---|---|
選項前綴 | 必須加?- (如?-e 、-f ) | 無?- (直接寫?aux ) |
用戶顯示 | UID (數字) | USER (用戶名) |
CPU/內存 | 無默認列,需手動指定(如?ps -eo %cpu,%mem ) | 默認顯示?%CPU ?和?%MEM |
命令行信息 | CMD (短格式),-f ?顯示完整命令 | 默認顯示完整?COMMAND |
進程樹 | ps -ejH | ps axjf |
?2.1.4 -o的使用
格式;ps -o <字段1>,<字段2>,<字段3>...
?例子:
2.1.5? [選項]--sort的使用?
作用:用于?按指定字段對進程列表進行排序,幫助快速識別高資源占用的進程或特定狀態的進程
ps [選項] --sort=[+|-]字段名+字段名:升序排序(默認,可省略 +)。-字段名:降序排序(如 -%cpu 表示 CPU 占用從高到低)。多字段排序:用逗號分隔(如 --sort=-%cpu,%mem)
例子:
2.2動態查看進程信息 top命令?
top是 Linux 系統中一個?實時動態監控系統進程和資源占用?的交互式工具,比?ps
?更直觀,適合實時觀察 CPU、內存、負載等關鍵指標
2.2.1top命令顯示的界面的組成
界面主要分為兩部分:
-
系統匯總信息(頂部前5行)
-
系統運行時間、用戶數、負載均衡(Load Average)、CPU/內存使用率等。
-
-
進程列表(下方)
-
實時更新的進程狀態(默認按 CPU 占用排序)。
-
如下圖所示:?
?系統匯總信息?(頂部前5行)?
第一行:系統運行時間與負載
內 容 | 說 明 |
---|---|
13:43:55 | 系統當前時間 |
up 1:57 | 系統的運行時間1小時57分鐘 |
4 users | 當前登錄了四個用戶 |
load average: 0.00,0.00,0.00 | 系統在之前 1 分鐘、5 分鐘、15 分鐘的平均負載 |
?第二行:任務(進程)狀態
內 容 | 說 明 |
---|---|
Tasks: 216 total | 系統中的進程總數 |
1 running | 正在運行的進程數 |
215 sleeping | 睡眠的進程數 |
0 stopped | 正在停止的進程數 |
0 zombie | 僵尸進程數。如果不是 0,則需要手工檢查僵尸進程 |
第三行:CPU使用率
字段 | 含義 |
---|---|
us | 用戶空間?CPU 占用(如應用程序運算)。 |
sy | 內核空間?CPU 占用(如系統調用、中斷處理)。 |
ni | 低優先級進程(nice 值>0)占用的CPU。 |
id | 空閑CPU百分比(越高說明系統負載越輕)。 |
wa | I/O等待(高值說明磁盤或網絡瓶頸)。 |
hi /si | 硬件/軟件中斷占用(通常接近0)。 |
st | 虛擬機偷取時間(若>10%,說明宿主物理機資源不足) |
第四行:物理內存(RAM)
字段 | 含義 |
---|---|
total | 內存總量(單位:MiB)。 |
free | 完全未使用的內存(Linux會充分利用空閑內存緩存數據,此值低未必是問題)。 |
used | 已使用的內存(含應用程序和緩存)。 |
buff/cache | 緩存和緩沖區內存(可被快速釋放供應用程序使用)。 |
第五行:交換分區(Swap)
字段 | 含義 |
---|---|
total /free /used | Swap分區總量/剩余/使用量(若used 持續>0,說明物理內存不足)。 |
avail Mem | 可用內存估算(含未被占用的緩存,更真實反映剩余可用內存)。 |
?進程列表(動態刷新)
字段含義同ps 命令
2.2.2top命令的選項
選項 | 作用 | 示例 |
---|---|---|
-d <秒> | 設置刷新間隔時間(默認3秒)。 | top -d 1 (每秒刷新) |
-n <次數> | 刷新指定次數后自動退出(適合腳本捕獲數據)。 | top -n 2 (刷新2次后退出) |
-b | 批處理模式(禁止交互,直接打印結果)。 | top -b -n 1 > log.txt |
-p <PID> | 僅監控指定PID(多個PID用逗號分隔)。 | top -p 1234,5678 |
-u <用戶> | 僅顯示指定用戶的進程。 | top -u mysql |
-c | 切換顯示完整命令行(啟動時直接展開)。 | top -c |
2.2.3top命令的交互界面
在?top
?運行后,可通過按鍵動態調整:
按鍵 | 功能 |
---|---|
m | 按內存使用率排序(升序)。 |
T | 按運行時間排序(降序)。 |
N | 按PID排序(升序)。 |
c | 按照 CPU 的使用率排序,默認就是此選項 |
k | 終止進程(需輸入PID,默認發送SIGTERM )。 |
r | 調整進程優先級(需輸入PID和新的nice 值)。 |
h或者? | 顯示幫助菜單。 |
q | 退出?top 。 |
2.3 以樹狀結構顯示當前系統中運行的進程 pstree
pstree
是 Linux 中用于?以樹狀結構可視化進程父子關系?的命令,比?ps
?更直觀地展示進程的層次結構。
pstree //不指定參數:顯示整個系統的進程樹,以 systemd(或 init)為根節點。pstree [選項] <PID> //指定 PID:顯示該進程及其子進程的子樹。pstree [選項] <用戶名> //指定用戶名:僅顯示該用戶的進程樹。常用選項
-a 顯示啟動每個進程對應的完整指令,包括啟動進程的路徑、參數等
-p 顯示PID
-T 不顯示線程thread,默認顯示線程
-u 顯示用戶切換
-H pid 高亮顯示指定進程及其前輩進程
2.4?查看指定的進程信息?
2.4.1根據PID查程序名 prtstat
例子:查找PID=10268的進程信息
2.4.2根據程序名查PID?pgrep和pidof
選項 | 作用 |
---|---|
-l | 同時輸出進程名(否則僅輸出 PID)。 |
-u | 按用戶名過濾(如?-u root )。 |
-a | 顯示完整格式的進程名。 |
-p pid | 顯示指定進程的子進程。 |
例子:?
[root@test ~]# pgrep -l "log" //顯示進程名
435 xfs-log/dm-0
713 xfs-log/sda1
790 xfs-log/md5
877 systemd-logind
885 abrt-watch-log
886 abrt-watch-log
890 rsyslogd[root@localhost ~]#pidof nginx //查看 nginx進程的 pid 號
22142 22002
2.5?監控系統資源 vmstat
vmstat
(Virtual Memory Statistics)是 Linux 系統中用于?監控系統資源使用情況?的命令行工具,主要報告?內存、進程、CPU 活動、磁盤 I/O?等關鍵指標。
1. Procs(進程)
字段 | 含義 |
---|---|
r | 運行隊列中的進程數(正在運行或等待 CPU 的進程,若持續 > CPU 核心數,說明 CPU 飽和)。 |
b | 不可中斷睡眠的進程數(通常因 I/O 阻塞,如磁盤讀寫)。 |
2. Memory
字段 | 含義 |
---|---|
swpd | 已使用的?交換分區(Swap)?大小。 |
free | 空閑的物理內存。 |
buff | 用作?緩沖區?的內存(緩存文件元數據)。 |
cache | 用作?頁面緩存?的內存(緩存文件內容)。 |
3. Swap(交換分區)
字段 | 含義 |
---|---|
si | 從磁盤換入內存?的數據量(KB/s,高值說明內存不足)。 |
so | 從內存換出到磁盤?的數據量(KB/s,高值說明內存不足)。 |
4. I/O(磁盤)
字段 | 含義 |
---|---|
bi | 從塊設備讀取?的塊數(Blocks/s,如磁盤讀操作)。 |
bo | 寫入塊設備?的塊數(Blocks/s,如磁盤寫操作)。 |
5. System(系統)
字段 | 含義 |
---|---|
in | 每秒中斷次數(包括時鐘中斷)。 |
cs | 每秒上下文切換次數(進程/線程切換,高值可能因過多線程或鎖競爭)。 |
6. CPU
字段 | 含義 |
---|---|
us | 用戶空間?CPU 時間(應用程序運算)。 |
sy | 內核空間?CPU 時間(系統調用、中斷處理)。 |
id | 空閑 CPU 時間。 |
wa | I/O 等待時間(高值說明磁盤瓶頸)。 |
st | 虛擬機偷取時間(若 >10%,物理機資源不足)。 |
?三:進程的前后臺調度?
?3.1區別
特性 | 前臺進程 | 后臺進程 |
---|---|---|
終端控制權 | 占用當前終端,用戶無法輸入其他命令,直到進程結束。 | 不占用終端,啟動后立即返回 Shell,用戶可繼續操作。 |
適用場景 | 需要交互的命令(如?vim 、passwd )。 | 長時間運行的任務(如編譯、下載),并行運行 |
3.2前臺和后臺程序的切換?
Linux 前后臺任務管理
├── **后臺啟動**
│ └── `命令 + &`(例:`python script.py &`)
├── **查看任務**
│ └── `jobs -l`(顯示任務編號與進程ID)
├── **前后臺切換**
│ ├── 前臺轉后臺:`Ctrl+Z` → `bg %任務編號`
│ └── 后臺轉前臺:`fg %任務編號`
├── **任務控制**
│ ├── 暫停任務:`Ctrl+Z`
│ └── 恢復后臺運行:`bg %任務編號`
└── **終止任務**└── `kill %任務編號` 或 `kill 進程ID`
四:結束進程?
4.1kill
kill
?命令是 Linux 中用于?向進程發送信號(Signal)?的核心工具,用于終止進程
kill [選項] <PID> // 通過進程ID發送信號常用信號
-1 重新加載進程-9 強制結束進程-19 暫時停止進程
-18 讓進程從停止狀態恢復
4.2killall
killall
?是 Linux 中用于?按進程名批量終止進程?的命令,相比 kill(需指定 PID),它直接通過進程名稱操作,更適合批量管理。
命令格式
killall [選項] [信號] 進程名[選項]
-u 僅終止指定用戶的進程
-l 列出可用的信號列表
-i 交互式,詢問是否要殺死某個進程
-I 忽略進程名的大小寫
五.計劃管理工具
5.1計劃管理工具的定義
計劃管理工具是指通過系統化的方法,幫助個人或組織對任務、資源、時間等要素進行規劃、協調、監控和優化的軟件或平臺。其核心目標是通過結構化流程提升效率,確保項目或任務在既定時間、預算和資源約束下達成目標
5.2at命令
5.2.1定義
?at命令是 Linux 中用于?在指定時間執行一次性任務?的計劃任務工具,適合臨時安排未來某個時間點運行的命令或腳本。
5.2.2格式
at [選項] 時間??
其中關于時間有絕對時間和相對時間兩種計時方式
絕對時間?
-
格式 用法 HH:MM 比如 04:00 AM。如果時間已過,則它會在第二天的同一時間執行。 Midnight(midnight) 代表 12:00 AM(也就是 00:00)。 Noon(noon) 代表 12:00 PM(相當于 12:00)。 Teatime(teatime)下午茶 代表 4:00 PM(相當于 16:00)。 英文月名 日期 年份 比如 January 15 2018 表示 2018 年 1 月 15 號,年份可有可無。 MMDDYY、MM/DD/YY、MM.DD.YY 比如 011518 表示 2018 年 1 月 15 號。
相對時間
now +n minutes-----------從現在起 n 分鐘后
now +n hours--------------從現在起 n 小時后
now +n days---------------從現在起 n 天后
now +n weeks-------------從現在起 n 周后
5.2.3例子
at 14:30
at> echo "會議時間到了!" > ~/reminder.txt
at> <按Ctrl+D結束>//這個命令會在下午2:30創建一個提醒文件at now + 5 minutes
at> wall "系統將在5分鐘后重啟,請保存工作!"
at> <Ctrl+D>//5分鐘后執行命令at midnight 12252023
at> /home/user/christmas_script.sh
at> <Ctrl+D>//2023年12月25日午夜執行命令
5.3crontab工具?
5.3.1定義
crontab是 Linux/Unix 系統中用于設置?周期性任務?的工具,允許用戶在固定時間、日期或間隔自動執行命令或腳本。與 at(單次任務調度)不同,crontab適用于?重復性任務。
5.3.2格式
crontab [選項]? 文件名
選項 | 說明 |
---|---|
-e | 編輯當前用戶的 crontab 文件 |
-l | 列出當前用戶的 crontab 任務 |
-r | 刪除當前用戶的 crontab 任務(全部刪除) |
-i | 刪除前提示確認(配合?-r ?使用) |
-u user | 管理指定用戶的 crontab(需 root 權限) |
crontab -l //查看當前用戶的crontabcrontab -e //創建或編輯當前用戶的crontab執行此命令后,會打開一個文本編輯器,編輯crontab文件
?crontab時間格式
* ? ?* ? ?* ? ?* ? ?* ? ?command_to_execute
│ ? ?│ ? ?│ ? ?│ ? ?│
│ ? ?│ ? ?│ ? ?│ ? ?└───── 星期 (0 - 6, 0=周日)
│ ? ?│ ? ?│ ? ?└────────── 月份 (1 - 12)
│ ? ?│ ? ?└─────────────── 日 (1 - 31)
│ ? ?└──────────────────── 小時 (0 - 23)
└───────────────────────── 分鐘 (0 - 59)
特殊符號說明
符號 | 含義 | 示例 |
---|---|---|
* | 任意值(每分鐘/每小時等) | * * * * * ?→ 每分鐘執行 |
, | 指定多個時間點 | 0,15,30,45 * * * * ?→ 每 15 分鐘執行 |
- | 時間范圍 | 0 9-18 * * * ?→ 9AM-6PM 每小時執行 |
/ | 間隔時間 | */5 * * * * ?→ 每 5 分鐘執行 |
?5..3.3例子
# 每天 9AM-6PM,每小時執行一次
0 9-18 * * * /path/to/check_status.sh# 每周一至周五,上午 8:30 執行
30 8 * * 1-5 /path/to/daily_task.sh# 每月 1 號和 15 號,晚上 11:30 執行
30 23 1,15 * * /path/to/monthly_job.sh# 每 10 分鐘執行,但僅在工作日(周一到周五)
*/10 * * * 1-5 /path/to/frequent_task.sh
六.怎么查看操作系統的五大性能
1.內存
2.磁盤 磁盤剩余量 磁盤I/O讀寫性能
3.CPU CPU占用率
4.網絡
內存用free;top
磁盤剩余量用df;lsblk;fdisk -l
磁盤讀寫用iostat;vmstat
CPU用top(實時) ps(靜態)
網絡 iftop?
系統版本cat /etc/redhat-release
ip地址 ifconfig
內核版本 uname-r?