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

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

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


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

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

答案1

fromPRIps -o pri,第 18 场是39 - priority哪里。priority/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)。

相关内容