`ps` 的 `PRI` 列与手册页不一致

kik*_*s34 2 linux man ps nice

更新:我的理解是正确的,手册页ps已更新为 PRI 列的以下内容:“进程的优先级。数字越大,优先级越高。”

\n
\n

我一直在尝试了解 Linux 中的调度优先级是如何工作的。\n这是我得到的:

\n
    \n
  • 内核为每个进程使用一个优先级值,范围从0到139。数字越低,进程的优先级越高。
  • \n
  • 从 0 到 99 的优先级值被保留,所有用户空间进程的优先级从 100 到 139。
  • \n
  • Linux提供了nice接口,该接口是暴露给用户并且可以由用户修改的优先级。值nice范围从-20到19,映射到优先级100到139。与优先级值一样,值越低nice,进程的优先级越高。
  • \n
\n

我现在的问题是:PRI 栏表示什么ps

\n

的手册页ps说:

\n
\n
   pri         PRI       priority of the process.  Higher number means \n                         lower priority.\n
Run Code Online (Sandbox Code Playgroud)\n
\n

但该值的范围是 0 到 39,我根据经验确定它等于19 - nice

\n

鉴于这种关系,不可能使列nice中显示的优先级都PRI满足“数字越大优先级越低”。

\n

我缺少什么?

\n
\n

显示此行为的示例:

\n
root@kali:~# ps -ao pid,comm,pri,nice\n  PID COMMAND         PRI  NI\n 6153 cat              19   0\n (\xc2\xb7\xc2\xb7\xc2\xb7)\nroot@kali:~# renice -n -10 -p 6153\n6153 (process ID) old priority 0, new priority -10\nroot@kali:~# ps -ao pid,comm,pri,nice\n  PID COMMAND         PRI  NI\n 6153 cat              29 -10\n (\xc2\xb7\xc2\xb7\xc2\xb7)\n
Run Code Online (Sandbox Code Playgroud)\n

小智 6

from是,第PRI18场是哪里。ps -o pri39 - prioritypriority/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

中的优先级字段(第 18 位)/proc/PID/stat由内核设置fs/proc/array.ctask_struct->prio - 100(通过task_prio()MAX_RT_PRIO定义为100)。