Linux
ps
的 PRI
列與手冊頁不一致
**更新:**我的理解是正確的,並且手冊頁
ps
已更新為現在為 PRI 列聲明以下內容:“程序的優先級。數字越大,優先級越高。”我一直試圖了解調度優先級在 linux 中是如何工作的。這是我所擁有的:
- 核心為每個程序使用一個優先級值,範圍從 0 到 139。數字越小,程序的優先級越高。
- 保留從 0 到 99 的優先級值,所有使用者空間程序的優先級從 100 到 139。
- Linux 提供了
nice
使用者可以優先公開和修改的介面。取值範圍從-20 到19 ,nice
映射到優先級100 到139。與優先級值一樣,值越低nice
,程序的優先級越高。我現在的問題是:PRI 列
ps
表示什麼?的手冊頁
ps
說:pri PRI priority of the process. Higher number means lower priority.
但該值的範圍是 0 到 39,我憑經驗確定它等於
19 - nice
。
nice
鑑於這種關係,列中顯示的優先級和兩者都不可能PRI
滿足“數字越大優先級越低”。我錯過了什麼?
顯示此行為的範例:
root@kali:~# ps -ao pid,comm,pri,nice PID COMMAND PRI NI 6153 cat 19 0 (···) root@kali:~# renice -n -10 -p 6153 6153 (process ID) old priority 0, new priority -10 root@kali:~# ps -ao pid,comm,pri,nice PID COMMAND PRI NI 6153 cat 29 -10 (···)
PRI
fromps -o pri
是39 - priority
,第priority
18 個欄位從哪裡開始/proc/PID/stat
。如果您想要未損壞的欄位
proc/PID/stat
,您可以使用ps -o priority
.如果你想要真正的優先級,你可以用
ps -o pri_baz
.可以使用和獲得具有該值的其他有趣的
ps -o pri_foo
修飾。ps -o pri_bar``ps -o opri
我不騙你。你可以在這裡查看原始碼。
注意事項
/proc/PID/stat
:優先級欄位 (18th) in
/proc/PID/stat
由核心設置fs/proc/array.c
為task_struct->prio - 100
(viatask_prio()
;MAX_RT_PRIO
定義為100
)。