procfsのプロセス優先順位の値が異なります

procfsのプロセス優先順位の値が異なります

たとえば、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によると、PRIの値は18番目の値(1から計算)で見つけることができるので、このときPRI = 20です。

psコマンドの出力と/ proc統計ファイルに保存されている値の間になぜそれほど大きな違いがあるのか​​疑問に思います。

ベストアンサー1

まあ、フィールドpriは正確に39から表示される値を引いたものです/proc/$pid/stat(したがって39 - 20 = 19)。また、「UNIX「PRI」ほど正当ではない」と言われています。

Unix98では、高い「PRI」優先順位が低いとのみ規定しています。

しかし、ここには該当しません。

しかし!以下もありません優先順位のための他の出力形式はすべて、元の値、否定、または否定といくつかの定数を持ちます。 1つを選択してください。以下は異なる値を持つ3匹の猫ですnice

$ ps -o pid,rtprio,pri,opri,priority,pri_foo,pri_bar,pri_baz,pri_api,ni,args -Ccat
  PID RTPRIO PRI PRI PRI FOO BAR BAZ API  NI COMMAND
18418      -   0  99  39  19  40 139 -40  19 cat /dev/zero
18419      -  19  80  20   0  21 120 -21   0 cat /dev/zero
18420      -  39  60   0 -20   1 100  -1 -20 cat /dev/zero

コードのコメントは次のとおりです。

SunとSCOはこの-c動作を追加しました。 Sun は「pri」と「opri」を定義します。

したがって、出力範囲を一致するように変更する必要があるいくつかの歴史的な理由があります。ここにある値をps -c使用してください。カーネルがレンダリングした生の値です。pripriority

関連ソースコードファイルは次のとおりです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

おすすめ記事