`ps`の `PRI`列がマニュアルページと一致しません。

`ps`の `PRI`列がマニュアルページと一致しません。

修正する:私の理解は正しいです。 PRI 列について次の内容を読むようにマニュアルページがps更新されました。 「プロセスの優先順位。数値が高いほど優先順位が高くなります。」


私は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

で、18番目のシーンはどこにPRIありますか?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)。

関連情報