命令“top”和“ps”显示不同的优先级值 - 为什么?

命令“top”和“ps”显示不同的优先级值 - 为什么?

top显示优先级为20对于大多数流程,包括(例如火狐垃圾箱)。

同时ps -o pid,lwp,pri,nice,start,stat,bsdtime,cmd,comm -C firefox-bin显示:

  PID   LWP PRI  NI  STARTED STAT   TIME CMD                         COMMAND
 9798  9798  19   0 14:03:47 Sl     2:17 /opt/firefox/firefox        firefox-bin

由于 top 和 ps 都是古老的命令,因此这似乎不太可能是一个错误。为什么会出现差异?

答案1

Linux优先级范围从0到139。您可以通过查看进程的真实优先级预定的进程中的文件'/进程/子目录。例如,我系统上的 Firefox 的进程 ID 为 84163。因此,如果我运行grep ^prio /proc/84163/sched,它告诉我优先级是 120。这是 Linux 中的默认优先级。实时优先级范围为 0 至 99,用户可以分配优先级为 100 至 139。但是,附注告诉我 Firefox 的优先级是 80 并且顶部告诉我是 20。为什么这三个都不同?根据这一页,ps 给出的优先级范围从 -40 到 99。因此,要获得真正的优先级,请在其上添加 40。 top 命令将每个优先级减去 100。因此,要获得顶部的真正优先级,请为其添加 100。

答案2

看起来top显示优先级为,20 + nice valueps显示19 - nice value所以两者都将优先级显示为从 0 到 39 的值,但top0 表示最高优先级,但ps39 表示最高优先级。

我不确定为什么会有所不同,这可能是一个错误,ps因为它的手册页说“数字越高意味着优先级越低”。

相关内容