修正する:私の理解は正しいです。 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 pri
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.c
task_struct->prio - 100
(を通じてtask_prio()
;MAX_RT_PRIO
として定義された100
)。