Linux進(jìn)程優(yōu)先級解讀
1.概念
1.1基本概念
cpu資源分配的先后順序,就是指進(jìn)程的優(yōu)先權(quán)(priority)。
優(yōu)先權(quán)高的進(jìn)程有優(yōu)先執(zhí)行權(quán)利。配置進(jìn)程優(yōu)先權(quán)對多任務(wù)環(huán)境的linux很有用,可以改善系統(tǒng)性能。
還可以把進(jìn)程運行到指定的CPU上,這樣一來,把不重要的進(jìn)程安排到某個CPU,可以大大改善系統(tǒng)整體性能。

Linux中優(yōu)先級數(shù)字越小,優(yōu)先級越高。
1.2優(yōu)先級vs權(quán)限
簡單的說優(yōu)先級和權(quán)限的區(qū)別:
- 優(yōu)先級:已經(jīng)能了,獲取資源的順序。(排隊號)
- 權(quán)限:能不能獲取資源。(準(zhǔn)考證)
| 對比維度 | 優(yōu)先級(Priority) | 權(quán)限(Permission) |
|---|---|---|
| 定義 | 進(jìn)程獲取 CPU 資源的優(yōu)先順序,決定調(diào)度優(yōu)先級 | 規(guī)定用戶 / 用戶組對文件 / 目錄的訪問、修改、執(zhí)行權(quán)限 |
| 作用對象 | 僅針對運行中的進(jìn)程(Process) | 僅針對文件和目錄(File/Directory) |
| 核心目標(biāo) | 優(yōu)化 CPU 資源分配,提升系統(tǒng)響應(yīng)速度和運行效率 | 保護(hù)資源安全,防止未授權(quán)訪問或操作 |
| 數(shù)值 / 標(biāo)識范圍 | - 靜態(tài)優(yōu)先級:nice值(-20~19,值越小優(yōu)先級越高) - 動態(tài)優(yōu)先級:內(nèi)核根據(jù)進(jìn)程狀態(tài)動態(tài)調(diào)整 | - 權(quán)限標(biāo)識:r(讀)、w(寫)、x(執(zhí)行) - 適用用戶:u(所有者)、g(所屬組)、o(其他用戶) |
| 常用操作命令 | - nice:啟動進(jìn)程時設(shè)置優(yōu)先級(如nice -n 5 ./app) - renice:調(diào)整已有進(jìn)程優(yōu)先級(如renice -10 1234) - chrt:設(shè)置實時進(jìn)程優(yōu)先級 | - chmod:修改權(quán)限(如chmod 755 file) - chown:修改所有者(如chown user:group file) - chgrp:修改所屬組(如chgrp group file) |
| 示例場景 | - 后臺備份進(jìn)程設(shè)為低優(yōu)先級(避免影響前臺操作) - 實時監(jiān)控進(jìn)程設(shè)為高優(yōu)先級(確保及時響應(yīng)) | - 系統(tǒng)配置文件僅root可寫(rw-r--r--) - 腳本文件添加執(zhí)行權(quán)限(chmod +x script.sh) |
| 與用戶身份的關(guān)系 | 普通用戶只能降低自身進(jìn)程優(yōu)先級(或提升至有限范圍),root可任意調(diào)整 | 權(quán)限與用戶身份強關(guān)聯(lián)(所有者權(quán)限 > 組權(quán)限 > 其他用戶權(quán)限),root擁有權(quán)限豁免權(quán) |
1.3為什么要有優(yōu)先級?
進(jìn)程訪問的資源(尤其是 CPU)始終是有限的,而系統(tǒng)中同時運行的進(jìn)程往往數(shù)量較多,不可避免會出現(xiàn)資源競爭。
操作系統(tǒng)的調(diào)度機制雖以 “分時” 為基礎(chǔ),追求基本公平,但若無優(yōu)先級區(qū)分,可能導(dǎo)致關(guān)鍵進(jìn)程(如實時響應(yīng)、系統(tǒng)核心任務(wù))被非關(guān)鍵進(jìn)程擠占資源,出現(xiàn)響應(yīng)卡頓或延遲 ;同時,若完全 “平均分配” 資源,還可能引發(fā) “饑餓問題”—— 某些進(jìn)程因長期得不到足夠調(diào)度而陷入停滯。
2.查看系統(tǒng)進(jìn)程
2.1PRI和RI
- 老規(guī)矩:先寫個簡單的進(jìn)程代碼:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
printf("I am a process! pid=%d\n",getpid());
return 0;
}
ps -al

| PRI | 代表這個進(jìn)程可被執(zhí)行的優(yōu)先級,其值越小越早被執(zhí)行 |
| NI | 進(jìn)程優(yōu)先級的修正數(shù)據(jù),nice 值,nice其取值范圍是-20至19,一共40個級別。 新的優(yōu)先級 = 優(yōu)先級(默認(rèn)80) + nice, 這樣,當(dāng)nice值為負(fù)值的時候,那么該程序?qū)?yōu)先級值將變小,即其優(yōu)先級會變高,則其越快被 執(zhí)行,所以調(diào)整進(jìn)程優(yōu)先級,在Linux下,就是調(diào)整進(jìn)程nice值。 |
2.2PRI vs NI
需要強調(diào)一點的是,進(jìn)程的nice值不是進(jìn)程的優(yōu)先級,他們不是一個概念,但是進(jìn)程nice值會影響到進(jìn)程的優(yōu)先級變化。
可以理解nice值是進(jìn)程優(yōu)先級的修正修正數(shù)據(jù)
3.修改進(jìn)程優(yōu)先級的命令
3.1用top命令更改已存在進(jìn)程的nice
- 輸入top
- 進(jìn)入top后按“r”–>輸入進(jìn)程PID–>輸入nice值



PRI 為99=進(jìn)程默認(rèn)值80 +nice值19 ,之前介紹 nice其取值范圍是-20至19,即使我們輸入了100,nice值還是19,是為了防止調(diào)度出現(xiàn)問題,把優(yōu)先級控制在可控范圍內(nèi)。
- 再次修改nice值會失敗,進(jìn)程優(yōu)先級不能經(jīng)常修改

- 可以使用root修改

- 我們

結(jié)果變成了70,說明進(jìn)程優(yōu)先級是= 進(jìn)程默認(rèn)值+nice值 。
3.2nice 命令
nice 命令用于在啟動進(jìn)程時設(shè)置其優(yōu)先級。其原理是通過指定nice值(也叫NI值)來調(diào)整進(jìn)程的基本優(yōu)先級(PRI) ,新的優(yōu)先級計算公式為:新的優(yōu)先級 = 基本優(yōu)先級 + nice 值。
nice值的范圍是 - 20 到 19,數(shù)值越小,進(jìn)程的優(yōu)先級越高,也就意味著該進(jìn)程在爭奪 CPU 資源時更具優(yōu)勢,能獲得更多的 CPU 時間片。但普通用戶只能設(shè)置 nice 值為 0 到 19,只有 root 用戶可以設(shè)置為 - 20 到 19 的任意值。
- 語法格式:
nice [ -n <nice值> ] <命令> [<命令參數(shù)>]
- 示例:
sudo nice -n -10 ./myprocess

3.3renice 命令
renice命令用于修改已經(jīng)在運行中的進(jìn)程的優(yōu)先級。在系統(tǒng)運行過程中,你可能發(fā)現(xiàn)某個進(jìn)程占用資源過多影響了其他關(guān)鍵進(jìn)程,或者某個后臺進(jìn)程優(yōu)先級太低執(zhí)行過慢,這時就可以使用 renice 來動態(tài)調(diào)整其優(yōu)先級。
- 語法格式:
renice [ -n <nice值> ] <進(jìn)程PID> # 對指定用戶啟動的所有進(jìn)程調(diào)整優(yōu)先級 renice [ -n <nice值> ] -u <用戶名>
- 示例:
renice 10 2873999

4.其他概念
| 術(shù)語 | 含義說明 |
|---|---|
| 競爭性 | 系統(tǒng)進(jìn)程數(shù)目眾多,而 CPU 資源有限(甚至僅有 1 個),因此進(jìn)程之間存在資源競爭。為實現(xiàn)高效任務(wù)處理和合理資源競爭,引入了優(yōu)先級機制。 |
| 獨立性 | 多進(jìn)程運行時需獨享各類資源,進(jìn)程間運行過程互不干擾。 |
| 并行 | 多個進(jìn)程在多個 CPU 上分別同時運行,稱為并行。 |
| 并發(fā) | 多個進(jìn)程在單個 CPU 上通過進(jìn)程切換的方式,在一段時間內(nèi)使多個進(jìn)程均得以推進(jìn),稱為并發(fā)。 |
5.總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
apache中使用mod_gnutls模塊實現(xiàn)多個SSL站點配置(多個HTTPS協(xié)議的虛擬主機)
這篇文章主要介紹了apache中使用mod_gnutls模塊實現(xiàn)多個SSL站點配置,也就是多個HTTPS協(xié)議的虛擬主機配置方法,需要的朋友可以參考下2014-06-06
Linux 服務(wù)器本地部署 DeepSeek-R1 大模型并在遠(yuǎn)端Web-UI訪問保姆級教
本文詳細(xì)介紹了在Linux服務(wù)器上部署DeepSeek模型的步驟,包括安裝Ollama、下載模型、配置Web-UI服務(wù)以及使用Chatbox進(jìn)行遠(yuǎn)程訪問,感興趣的朋友一起看看吧2025-02-02
如何監(jiān)控 Linux 服務(wù)器狀態(tài)的方法
這篇文章主要介紹了如何監(jiān)控 Linux 服務(wù)器狀態(tài)的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06

