文章目錄
- 前言
- 一、程序與進程的關系
- 1.1 程序與進程的定義
- 1.2 父進程與子進程
- 二、查看進程信息
- 2.1 ps 命令(重點)
- 2.2 動態查看進程信息top命令(重點)
- 2.3 pgrep命令查詢進程信息
- 2.4 pstree命令以樹形結構列出進程信息
- 三、進程的啟動方式
- 3.1 手工啟動進程
- 3.2 調度啟動
- 四、進程的前后臺調度
- 4.1 Ctrl+Z組合鍵
- 4.2 jobs 命令
- 4.3 fg 和 bg 命令
- 五、終止進程的運行
- 5.1 Ctrl+C組合鍵
- 5.2 kill 命令
- 5.3 killall 命令
- 5.4 pkill 命令
- 六、計劃任務管理
- 6.1 一次性任務:at 命令
- 6.2 周期性任務:cron 命令
- 6.3 cron 服務管理
- 總結
前言
進程管理是操作系統管理進程和資源的關鍵部分。在 Linux 中,進程是系統中所有任務的核心,進程管理命令主要用于查看、控制和調度系統中的進程。本文檔將詳細介紹 Linux 進程管理的相關概念、命令及實際應用案例,幫助用戶高效管理系統中的進程和計劃任務。
一、程序與進程的關系
1.1 程序與進程的定義
- 程序:是存儲在硬盤上的可執行代碼,像一本書的內容,靜態存放在硬盤或其他存儲設備上。例如,你下載并安裝的一個應用程序(如
firefox
)。 - 進程:是程序在運行時的實例,像是一本書被人打開并閱讀時,它在你眼前執行的過程。每當你運行一個程序,操作系統會創建一個進程,分配內存和 CPU 時間來執行這個程序。
1.2 父進程與子進程
-
父進程:操作系統中的核心進程,負責創建和管理子進程。類似于家庭中的家長角色,父進程為子進程分配系統資源(如內存和CPU時間片),并持續監控其運行狀態。典型的例子是Linux系統中的
init
進程(PID=1
),它作為所有用戶進程的源頭。父進程通過調用fork()
等系統調用來創建子進程,并可使用wait()
等調用等待子進程結束。 -
子進程:由父進程通過系統調用創建的獨立執行實體,擁有專屬的進程ID和地址空間。子進程會繼承父進程的環境變量、文件描述符等屬性,但運行后即實現完全獨立。通過
exec()
系列函數,子進程可以加載新程序并執行不同任務。例如在Web服務器架構中,主進程(父進程)會為每個客戶端請求生成獨立的子進程進行處理。子進程完成任務后,通過exit()
系統調用終止運行,并向父進程返回狀態信息。
二、查看進程信息
2.1 ps 命令(重點)
ps
(process status)命令用于查看系統中當前運行的進程。它顯示了與進程相關的信息,如進程 ID (PID)、用戶、CPU 和內存使用率等。
- 常用選項:
ps -aux
:顯示所有進程,包括其他用戶的進程。ps -ef
:以標準格式顯示所有進程。ps -aux | grep [進程名]
:通過管道和grep
命令過濾進程。
- 輸出字段解釋:
- USER:進程所屬的用戶。
- PID:進程 ID。
- %CPU:進程占用的 CPU 百分比。
- %MEM:進程占用的內存百分比。
- VSZ:進程使用的虛擬內存(單位 KB)。
- RSS:進程使用的物理內存(單位 KB)。
- STAT:進程的狀態,常見狀態有:R(運行)、S(睡眠)、
Z(僵尸)
、T(停止)等。 - START:進程的啟動時間。
- TIME:進程占用的 CPU 時間。
- COMMAND:啟動該進程的命令。
詳解
STAT:該進程的狀態(D:不可中斷的休眠狀態:R:正在運行狀態;S:處于休眠狀態,可被喚醒;T:停止狀態,可能是在后臺暫停或進程處于跟蹤調試狀態: Z:僵尸進程,進程已經中止,但是部分程序還在內存當中)
。
D:系統守護進程
T:調式、程序執行一般停止
R :該程序目前正在運作,或者是可被運作;
S :該程序目前正在睡眠當中 (可說是 idle 狀態啦!),但可被某些訊號(signal) 喚醒。
T :該程序目前正在偵測或者是停止了;
Z :該程序應該已經終止,但是其父程序卻無法正常的終止他,造成 zombie (疆尸) 程序的狀態D 不可中斷狀態.
它們含意如下::
<: 表示進程運行在高優先級上
N: 表示進程運行在低優先級上
L: 表示進程有頁面鎖定在內存中
s: 表示進程是控制進程
l: 表示進程是多線程的
+: 表示當前進程運行在前臺
D:系統守護進程
案例:
執行完畢vim
命令之后,查找 vim
進程,并顯示它的 CPU 和內存占用情況。
vim a.txt
ps -aux | grep vim
將/usr
目錄歸檔到當前文件夾,查看該進程狀態
tar -zcvf usr.tar.gz /usr
ps -aux|grep /usr
2.2 動態查看進程信息top命令(重點)
top
命令用于動態顯示 Linux 系統中運行的進程和資源使用情況,實時更新顯示。
- 常用快捷鍵:
P
:按 CPU 使用率排序。M
:按內存使用量排序。T
:按時間排序。1
:查看幾個cpuq
:退出 top。
- 輸出解釋:
- PID:進程 ID。
- USER:啟動該進程的用戶。
- %CPU:進程占用的 CPU 百分比。
- %MEM:進程占用的內存百分比。
- TIME+:進程累計使用的 CPU 時間。
- COMMAND:執行的命令。
案例1:
top
啟動 top
,查看實時的進程和系統資源占用情況。按 P
鍵查看 CPU 使用率排序,按 M
鍵查看內存使用情況排序。
按 P
鍵查看 CPU 使用率排序
按 M
鍵查看內存使用情況排序
案例2:
安裝系統壓力測試工具stress
# 啟用 EPEL 倉庫
yum install -y epel-release
# 安裝 stress 工具
yum install -y stress
# 驗證安裝是否成功
stress --version
-c, --cpu N
:指定 N 個進程,每個進程執行計算密集型的任務,通常是計算隨機數的平方根(消耗 CPU 資源)。
示例:
stress -c 4
top
啟動 4 個進程,消耗 CPU 資源。
2.3 pgrep命令查詢進程信息
pgrep
命令用于根據名稱或其他條件查找進程。
常用的參數:
- -l:選項可同時輸出對應的進程名以及PID
- -U:選項查詢特定用戶的進程
- -t:選項查詢在特定終端運行的進程
例1
pgrep -l "log" # 匹配進程名中包含 log 的進程
例2
pgrep -l -U simon
# 篩選屬于用戶simon的進程
2.4 pstree命令以樹形結構列出進程信息
pstree
是一個用于顯示當前系統中進程樹結構的命令行工具。它以樹狀圖形式展示進程間的父子關系,便于直觀理解進程的層級關系。
pstree
命令默認情況下只顯示各進程的名稱,結合以下常用的參數使用:
- -p:選項使用時可以同時列出對應的PID號
- -u:選項可以列出對應的用戶名
- -a:選項可以列出完整的命令信息
執行如下的“pstree -aup”命令可以查看當前系統的進程樹,包括各進程對應的PID 號、用戶名、完整命令等信息。從輸出結果中可以看出,systemd 進程確實是 Linux 操作系統中所有進程的“始祖”例1
pstree -aup hmj
三、進程的啟動方式
3.1 手工啟動進程
由用戶手工輸入命令或者可執行程序的路徑,可以至少啟動一個進程。根據該進程是否 需要占用當前的命令終端,手工啟動又可以分為前臺啟動和后臺啟動。
進程在前臺運行:
(如執行ls -l
命令)時,用戶必須等到該進程執行結束并退出以后才能繼續輸入其他命令,大多數命令操作在前臺啟動運行。進程在后臺運行時,用戶可以繼續在當前終端中輸入其他命令,而無須等待該進程結束,適用于運行耗時較長的操作。
? 啟動后臺進程需要使用&
操作符,將&
操作符放在要執行命令的最后面,進程啟動后會直接放入后臺運行,而不占用前臺的命令操作界面,方便用戶進行其他操作。例如,當使 用 cp
命令從光盤中制作鏡像文件時,由于需要復制的數據較多,耗時較長,因此可結合&
符號將復制操作放到后臺運行,以便用戶可以繼續執行其他命令操作
cp /dev/cdrom /opt/centos7.iso &
3.2 調度啟動
在服務器維護工作中,經常需要執行一些比較費時而且較占用資源的任務(如數據備份),這些任務更適合在相對空閑的時候(如夜間)進行。這時就需要用戶事先進行調度安排,指定任務運行的時間,當系統到達設定時間時會自動啟動并完成指定的任務。調度啟動的計劃任務進程均在后臺運行,不會占用用戶的命令終端。
進程的調度啟動可以通過 at
、crontab
命令進行設置,其中 at
命令用于設置一次性(如12:15 時重啟網絡服務)計劃任務,crontab
命令用于設置周期性運行(如每周五 17:30 備份數據庫)的計劃任務。
四、進程的前后臺調度
4.1 Ctrl+Z組合鍵
當Linux操作系統中的命令正在前臺執行時(運行尚未結束),按Ctrl+Z
組合鍵可以將當前進程掛起(調入后臺并停止執行),這種操作在需要暫停當前進程并進行其他操作時特別有用。例如,打包usr
并且調入后臺 ,可以按 Ctrl+Z
組合鍵將該下載任務調入后臺并暫停執行
tar zcf usr.tar.gz /usr
Ctrl+Z
jobs -l # 查看所有后臺進程
4.2 jobs 命令
jobs
命令用于查看當前會話中運行的后臺任務。
常用選項:
jobs -l
:列出當前所有后臺任務及其進程 ID。
案例:
將后臺的進程恢復運行
使用 bg(BackGround,后臺)命令,可以將后臺中暫停執行(如按 Ctrl+Z 組合鍵掛起)的任務恢復運行,繼續在后臺執行操作;
使用 fg 命令(ForeGround,前臺),可以將后臺任務重新恢復到前臺運行。
除非后臺中的任務只有一個,否則 bg 和 fg 命令都需要指定后臺進程的任務編號作
為參數。例如,執行如下的“fg 1”命令可以將之前掛起至后臺的 wget 進程重新調入前臺執行。
[root@localhost ~]# jobs
[1]- Stopped cp /dev/cdrom mycd.iso
[2]+ Stopped top
[root@localhost ~]# fg 1
查看當前終端會話中的后臺任務。
4.3 fg 和 bg 命令
- fg:將后臺任務帶回前臺執行。
- bg:將暫停的任務放回后臺繼續執行。
案例:
fg %1
將后臺任務編號為 1 的任務帶回前臺。
bg %2
將后臺任務編號為 2 的任務恢復在后臺運行。
五、終止進程的運行
5.1 Ctrl+C組合鍵
? 中斷正在執行的命令
5.2 kill 命令
kill
命令用于發送信號給進程,通常用來終止進程。
常用選項:
kill [PID]
:正常終止進程。kill -9 [PID]
:強制終止進程(不可恢復)。(常用)
案例:
kill 6281
終止 PID 為 1234 的進程。
kill -9 6281
強制終止 PID 為 1234 的進程。
5.3 killall 命令
killall
命令根據進程名稱終止進程。
案例:
vim test1.txt &
vim test2.txt &
vim test3.txt &
ps -aux|grep vim # 查看和vim有關的進程
killall -9 vim # 終止所有名為 vim的進程
一次性殺死所有和vim
有關的進程
5.4 pkill 命令
pkill
命令根據進程屬性(如用戶名、終端等)終止進程。
案例:
su - simon # 切換用戶
vim test1.txt &
vim test2.txt &
vim test3.txt &
ps -aux|grep simon
pkill -9 -U simon
ps -aux|grep simon # 查看該用戶的進程是否被殺死
終止所有由 root
用戶啟動的進程。
六、計劃任務管理
計劃任務用于自動執行系統中的任務。Linux 中常用的計劃任務工具包括 at
和 cron
。
6.1 一次性任務:at 命令
at
命令用于設置一次性任務,任務將在指定時間執行。
- 命令格式:
at [HH:MM] [yyyy-mm-dd]at> [要執行的命令] # 按CTRL+D提交任務
-
常用選項:
atq
:列出待執行的任務。atrm [任務編號]
:刪除指定的任務。
案例:
date
at at 14:25 2025-08-16
at>pgrep -U root|wc -l > /opt/ps.root
at> <EOT>
設置任務在指定時間執行,并將輸出保存到 /opt/ps.root
文件中。
atq
列出待執行的任務
·atrm [任務編號]
:刪除指定的任務。
6.2 周期性任務:cron 命令
cron
用于設置定期執行的任務。用戶可以通過 crontab
命令編輯和管理自己的計劃任務。
主要設置文件:
- 全局配置文件,位于文件:/etc/crontab
- 系統默認的設置,位于目錄:/etc/cron.*/
- 用戶定義的設置,位于文件:/var/spool/cron/用戶名
命令格式:
* * * * * [command]
*
:每個字段的取值范圍:分鐘(0-59),小時(0-23),日期(1-31),月份(1-12),星期(0-6,0 為周日)。[command]
:要執行的命令。
由于各字段的作用不同,其取值范圍也不一樣,如表 9-2 所示,當使用“*”時表示取值范圍中的任意時間。crontab 任務配置記錄中所設置的命令操作將在“分鐘”+“小時”+“日期”+ “月份”+“星期”都滿足的條件下執行。
crontab 計劃任務的配置字段說明分鐘 取值為 0~59 的任意整數
小時 取值為 0~23 的任意整數
日期 取值為 1~31 的任意整數(日期在該月份中必須有效)
月份 取值為 1~12 的任意整數
星期 取值為 0~7 的任意整數,0 或 7 代表星期日命令 可以是普通的命令,也可以是自己編寫的程序腳本除了“*”以外,還可以使用“-”(減號)、“,”(逗號)、“/”(斜杠)與數字構成表達式來表 示較復雜的時間關系。
減號“-”:可以表示一個連續的時間范圍,如“1-4”表示整數 1、2、3、4。
逗號“,”:可以表示一個間隔的不連續范圍,如“3, 4, 6, 8”。
?斜杠符號“/”:可以用來指定間隔頻率,如在日期字段中的“*/3”表示每隔 3 天。
應用示例:
0 17 * * 1-5
每周一至周五下午5點整30 8 * * 1,3,5
每周一、三、五上午8點30分0 8-18/2 * * *
每天上午8點至下午6點,每隔2小時執行一次0 0 */3 * *
每3天執行一次
常用命令:
-
crontab -e [-u 用戶名]
:編輯當前用戶的 cron 任務。 -
crontab -l [-u 用戶名]
:列出當前用戶的 cron 任務。 -
crontab -r [-u 用戶名]
:刪除當前用戶的所有 cron 任務。
其他命令:
設置用戶的周期性計劃任務列表主要通過 crontab 命令進行,結合不同的項可以完成不同的計劃任務管理操作。常用的選項如下。
-u:指定所管理的計劃任務屬于哪個用戶,默認是針對當前用戶(自己),一般只有 root 用戶有權限使用此選項(用于編輯、刪除其他用戶的計劃任務)。
下面將分別講解 crontab 命令相關選項的使用。crontab -u 用戶名 #指定XX用戶的cron服務crontab -u zx -l #列出zx用戶下的cron的詳細內容crontab -r #刪除所有用戶的cron內容,普通用戶執行,只刪除自己的cron內容crontab -r -u zx #刪除zx用戶的cron內容
案例1:
50 7 * * * /usr/bin/systemctl start httpd.service
25 15 * * * /usr/bin/systemctl stop httpd.service
每天的 7:50 啟動 httpd
服務,15:25 停止 httpd
服務。
crontab -e50 7 * * * /usr/bin/systemctl start httpd.service
25 15 * * * /usr/bin/systemctl stop httpd.service
crontab -l [-u 用戶名]
:列出當前用戶的 cron 任務。
crontab -r [-u 用戶名]
:列出當前用戶的 cron 任務。
案例2:
每兩分鐘記錄一次/opt
目錄下內容
crontab -e
*/2 * * * * /usr/bin/ls -lh /opt/* >> /opt/bak.txt
tail -f /var/log/cron # 追蹤cron的日志文件
6.3 cron 服務管理
- 啟動 cron 服務:
systemctl start crond
- 查看 cron 服務狀態:
systemctl status crond
- 啟用 cron 服務開機啟動:
systemctl enable crond
擴充 生產案列
例如,若要按固定的周期重復完成一些系統管理任務,任務內容如下:①每天早上 7:50
自動開啟 sshd 服務,22:50 關閉 sshd 服務;②每隔五天清空一cron 次 FTP 服務器公共目錄
/var/ftp/pub 中的數據;③每周六的 7:30 重新啟動系統中的 httpd 服務;④每周一、周三、周五的下午 17:30,使用 tar 命令自動備份/etc/httpd 目錄,則可由 root 用戶通過 crontab 設置以下計劃任務。[root@localhost ~]# crontab -e
50 7 * * * /usr/bin/systemctl start sshd.service
50 22 * * * /usr/bin/systemctl stop sshd.servic
0 0 */5 * * /usr/bin/rm -rf /var/ftp/pub/*
30 7 * * 6 /usr/bin/systemctl httpd restart
30 17 * * 1,3,5 /usr/bin/tar jcf httpdconf.tar.bz2 /etc/httpd/
*/2 * * * * ls -lh /home/*普通用戶執行“crontab -e”命令時,可以設置自己的計劃任務(需要注意命令的執行權限)。
例如,用戶 jerry 設置一條計劃任務:在每周日晚上的 23:55 將/etc/passwd 文件的內容復制到宿主目錄中,保存為 pwd.txt 文件,具體操作如下:
[jerry @localhost ~]# crontab -e
55 23 * * 7 /usr/bin/cp /etc/passwd /home/jerry/pwd.txt因各條計劃任務在執行時并不需要用戶登錄,所以任務配置記錄中的命令建議使用絕對路徑,以避免因缺少執行路徑而無法執行命令的情況。另外,在設置非每分都執行的任務時, “分鐘”字段也應該填寫一個具體的時間數值,而不要保留為默認的“*”,否則將會在每分鐘執行一次計劃任務。
(2)查看用戶的計劃任務列表
crontab 命令結合“-l”選項可以查看當前用戶的計劃任務列表,對于 root 用戶來說,還可以結合“-u”選項查看其他用戶的計劃任務,具體操作如下:[root@localhost ~]# crontab –l //查看用戶root 自己的計劃任務
50 7 * * * /usr/bin/systemctl start sshd.service
50 22 * * * /usr/bin/systemctl stop sshd.servic
0 0 */5 * * /usr/bin/rm -rf /var/ftp/pub/*
30 7 * * 6 /usr/bin/systemctl httpd restart
30 17 * * 1,3,5 /usr/bin/tar jcf httpdconf.tar.bz2 /etc/httpd/
[root@localhost ~]# crontab -l -u jerry //查看用戶jerry 的計劃任務
55 23 * * 7 /usr/bin/cp /etc/passwd /home/jerry/pwd.txt
[root@localhost ~]# ls -l /var/spool/cron/jerry
-rw-------. 1 root root 57 May 7 11:10 /var/spool/cron/jerry(3)刪除用戶的計劃任務列表
當只需要刪除某一條計劃任務時,可以通過“crontab -e”命令進行編輯;而若要清空某個用戶的所有計劃任務,可以執行“crontab -r”命令。[jerry@localhost ~]$ crontab -r //用戶jerry 清空自己設置的計劃任務[jerry@localhost ~]$ crontab -l
[jerry@localhost ~]$ crontab -l
no crontab for jerry案列
21 17 * * * /usr/bin/systemctl reboot
26 17 * * * /usr/bin/cp -r /etc/ /home/
#0 8-18/2 * * * /usr/binsystemctl start vsfrpd.service
0 * */3 * * /usr/bin/rm -rf /var/log/ftp/*.log
*/2 * * * * /usr/bin/systemctl start vsfrpd.service[root@192 home]# crontab -l -u lisi
17 19 * * * /usr/bin/cp -r /home/etc/ /home/lisi/backup/journalctl -xe
案例總結:
- 查看進程:
ps -aux | grep vim
查看 vim
進程的 CPU 和內存使用情況。
- 設置周期性任務:
crontab -e30 2 * * * /usr/bin/rsync -av /data /backup# 每天02:30將/data的內容同步到/backup
總結
這篇文檔詳細介紹了 Linux 系統中的進程管理及相關命令,涵蓋了從基本概念到實際操作的全方位內容。以下是核心要點總結:
-
程序與進程的關系
- 程序:靜態存儲在硬盤上的可執行代碼。
- 進程:程序運行的動態實例,由操作系統分配資源(如內存、CPU)執行。
- 父進程與子進程:父進程創建并管理子進程,類似于公司中的上下級關系。
-
查看進程信息
ps
命令:查看當前運行的進程,常用選項如ps -aux
或ps -ef
,支持通過grep
過濾特定進程。top
命令:動態實時顯示進程及資源占用情況,支持按 CPU、內存等排序。pgrep
和pstree
:分別用于查詢進程 PID 和以樹形結構展示進程關系。
-
進程的啟動方式
- 手工啟動:分為前臺啟動(占用終端)和后臺啟動(使用
&
符號)。 - 調度啟動:通過
at
設置一次性任務,或通過cron
設置周期性任務(如定時備份)。
- 手工啟動:分為前臺啟動(占用終端)和后臺啟動(使用
-
進程的前后臺調度
Ctrl+Z
:掛起當前前臺進程到后臺并暫停。jobs
、fg
、bg
:分別用于查看后臺任務、將任務恢復到前臺或后臺繼續運行。
-
終止進程
Ctrl+C
:中斷當前前臺進程。kill
、killall
、pkill
:通過 PID、進程名或屬性終止進程,kill -9
用于強制終止。
-
計劃任務管理
at
:設置一次性任務,如定時執行腳本。cron
:通過crontab
管理周期性任務,支持靈活的時間配置(如每天、每周或每隔幾天執行)。- 服務管理:使用
systemctl
啟動、啟用或查看crond
服務狀態。
-
實際案例
- 使用
ps -aux | grep vim
查看vim
進程。 - 通過
crontab -e
設置每天定時啟動/停止服務或備份文件。 - 使用
kill -9 PID
強制終止無響應的進程。
- 使用
本文檔為 Linux 系統管理員和用戶提供了全面的進程管理指南,幫助用戶高效監控、調度和控制系統中的進程,同時通過自動化任務提升系統管理效率。無論是日常維護還是復雜任務調度,這些命令和技巧都能發揮重要作用。