比如我们用ps查看firefox的PRI的值,然后看看procfs中存储的值是多少。
$ ps -o pid,comm,pri,ni 7000
PID COMMAND PRI NI
7000 firefox 19 0
$ cat /proc/7000/stat
7000 (firefox) S 1 6447 6447 0 -1 4194304 3162595 624998 158 10 30467 6903 3360 488 20 0 63 0 464836 9472659456 123045 18446744073709551615 94866409246720 94866409429052 140727418541056 0 0 0 0 4096 33572095 0 0 0 17 2 0 0 342 0 0 94866411526576 94866411528296 94866422095872 140727418542495 140727418542520 140727418542520 140727418544095 0
根据man proc,我们会在第18个值(从1开始计数)中找到PRI的值,所以在这种情况下PRI = 20
ps
我想知道为什么命令的输出和存储在 /proc stat 文件中的值有这样的差异?
嗯,显然该
pri
字段正好是 39 减去可见的值/proc/$pid/stat
(所以 39 - 20 = 19)。它也被评论为“不像 UNIX “PRI”那样合法”,因为这不适用于那里。
但!优先级有不少于六种其他输出格式,所有这些格式的原始值都被否定或否定,加上一些常数。挑一个。
nice
这是三只具有不同价值的猫:代码中的注释说
所以可能有一些历史原因来修复输出范围以匹配。在这里
ps -c
使用值。是内核呈现的原始值。pri
priority
相关源代码文件为
ps/output.c
:https ://gitlab.com/procps-ng/procps/blob/master/ps/output.c#L585
另外:https
://superuser.com/questions/286752/unix-ps-l-priority/286761 和https://stackoverflow.com/questions/18829350/linux-thread-priority-value