Infra Engineer

プロセス実行優先順位の変更~nice・reniceコマンド~
2021.11.26
Lv1

プロセス実行優先順位の変更~nice・reniceコマンド~

本記事の対象者

LPIC level1習得を目指す初学者の方
コマンドの基本的な用途について、要点を絞って解説します。


今回の内容

今回は、プロセス実行の優先順位の変更について解説します。
ナイス値は頻出ですので、必ず抑えておきましょう。

・プロセス実行優先順位の確認
・niceコマンド
・reniceコマンド
・まとめ
確認問題

プロセス実行優先順位の確認

プロセスには実行優先度があります。優先度が高いほど優先的に処理されることになります。
優先度を確認するには、「ps -l」コマンド、あるいは「top」コマンドを使用します。

例)
プロセスの優先度の確認
[user@localhost ~]# ps axl
F   UID     PID    PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
4     0       1       0  20   0 167800  4964 -      Ss   ?          0:01 /sbin/i
1     0       2       0  20   0      0     0 -      S    ?          0:00 [kthrea
1     0       3       2   0 -20      0     0 -      I<   ?          0:00 [rcu_gp
1     0       4       2   0 -20      0     0 -      I<   ?          0:00 [rcu_pa
1     0       5       2  20   0      0     0 -      I    ?          0:00 [kworke
1     0       6       2   0 -20      0     0 -      I<   ?          0:00 [kworke
1     0       7       2  20   0      0     0 -      I    ?          0:00 [kworke
1     0       8       2  20   0      0     0 -      I    ?          0:00 [kworke
(以下省略)
[user@localhost ~]# top
Tasks: 188 total,   1 running, 186 sleeping,   1 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :    978.8 total,     62.7 free,    542.4 used,    373.7 buff/cache
MiB Swap:    448.5 total,     36.2 free,    412.3 used.    279.2 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
     10 root      20   0       0      0      0 S   0.0   0.0   0:00.00 rcu_tasks_rude_
     11 root      20   0       0      0      0 S   0.0   0.0   0:00.00 rcu_tasks_trace
     12 root      20   0       0      0      0 S   0.0   0.0   0:00.35 ksoftirqd/0
     13 root      20   0       0      0      0 I   0.0   0.0   0:01.23 rcu_sched
     14 root      rt   0       0      0      0 S   0.0   0.0   0:00.00 migration/0
     15 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 idle_inject/0
     16 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/0
     17 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kdevtmpfs
(以下省略)

ps -l」の場合は、「PRI」の列が優先度を表しています。「top」の場合は、「PR」の列が優先度を表しています。
ここでそれぞれの優先度表記の右の列「NI」に注目してください。ここには「ナイス値」が表記されています。
ナイス値とは、優先度の操作をするために指定する値です。ここを設定することにより、プロセスの優先度をユーザー側で変更することができます。


nice

niceコマンドは、プロセス起動時にナイス値を設定することができます。
ナイス値は「-20~19」まであり、ナイス値が低いほど優先順位が高くなります
デフォルトのナイス値は「0」です。
また、ナイス値を下げる(優先度を上げる)ことができるのはrootユーザーだけです。
一般ユーザは、ナイス値を上げる(優先度を下げる)ことしかできません。

nice
意味 プロセス起動時に優先度を設定する。
書式 nice [オプション] コマンド

niceコマンドのオプションで抑えておくべきものは以下です。

オプション 説明
-<値> 指定した値分増加させたナイス値でプロセスを起動する。
-n <値> 指定した値でナイス値を設定し、プロセスを実行する。
例①)
ナイス値を指定せずに「vi」コマンドをバックグラウンドで実行。
[root@localhost ~]# nice vi &
[1] 1376
[root@localhost ~]# ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0  1361  1357  0  80   0 - 28886 do_wai pts/0    00:00:00 bash
0 T     0  1376  1361  0  90  10 - 31044 do_sig pts/0    00:00:00 vi
0 R     0  1377  1361  0  80   0 - 38331 -      pts/0    00:00:00 ps

ナイス値を指定せずに使用すると、10だけナイス値が増加します。

例②)
ナイス値を「-10」に指定して「vi」コマンドをバックグラウンドで実行。(-n)
[root@localhost ~]# nice -n -10 vi &
[2] 1397
[root@localhost ~]# ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0  1361  1357  0  80   0 - 28922 do_wai pts/0    00:00:00 bash
0 T     0  1376  1361  0  90  10 - 31044 do_sig pts/0    00:00:00 vi
4 T     0  1397  1361  0  70 -10 - 31044 do_sig pts/0    00:00:00 vi
0 R     0  1398  1361  0  80   0 - 38331 -      pts/0    00:00:00 ps
例③)
「-n」なしでナイス値を指定した場合の注意点。
[root@localhost ~]# nice -10 vi &
[3] 1399
[root@localhost ~]# ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0  1361  1357  0  80   0 - 28922 do_wai pts/0    00:00:00 bash
0 T     0  1376  1361  0  90  10 - 31044 do_sig pts/0    00:00:00 vi
4 T     0  1397  1361  0  70 -10 - 31044 do_sig pts/0    00:00:00 vi
0 T     0  1399  1361  0  90  10 - 31044 do_sig pts/0    00:00:00 vi
0 R     0  1400  1361  0  80   0 - 38331 -      pts/0    00:00:00 ps

PID「1399」が実行したプロセスですが、ナイス値は「10」になっています。
「-10」という指定は、「nice -n 10」と同じです。「ナイス値を-10増加」させたければ「nice ––10」と打たなければいけません。


renice

「renice」コマンドは、実行中プロセスのナイス値を変更できます。

renice
意味 実行中のプロセスのナイス値を変更する。
書式 renice [オプション] コマンド

reniceコマンドのオプションで抑えておくべきものは以下です。

オプション 説明
<値> 指定したナイス値を設定する。
-n <値> 指定したナイス値を設定する。
-p プロセスID 対象のプロセスIDを指定する。
例①)
ナイス値「5」で実行した「1539」のプロセスのナイス値を「15」に変更。
[root@localhost ~]# nice -n 5 vi &
[1] 1539
[root@localhost ~]# ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0  1361  1357  0  80   0 - 28962 do_wai pts/0    00:00:00 bash
0 T     0  1539  1361  0  85   5 - 31044 do_sig pts/0    00:00:00 vi
0 R     0  1540  1361  0  80   0 - 38331 -      pts/0    00:00:00 ps

[1]+  停止                  nice -n 5 vi
[root@localhost ~]# renice 15 -p 1539
1539 (process ID) old priority 5, new priority 15
[root@localhost ~]# ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0  1361  1357  0  80   0 - 28962 do_wai pts/0    00:00:00 bash
0 T     0  1539  1361  0  95  15 - 31044 do_sig pts/0    00:00:00 vi
0 R     0  1542  1361  0  80   0 - 38331 -      pts/0    00:00:00 ps
例②)
reniceの「-n」なし。
[root@localhost ~]# renice -15 -p 1539
1539 (process ID) old priority 15, new priority -15
[root@localhost ~]# ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0  1361  1357  0  80   0 - 28962 do_wai pts/0    00:00:00 bash
0 T     0  1539  1361  0  65 -15 - 31044 do_sig pts/0    00:00:00 vi
0 R     0  1545  1361  0  80   0 - 38331 -      pts/0    00:00:00 ps

reniceコマンドで「-n」を指定しない場合、ナイス値の前にオプションの「ハイフン」は必要ありません。
よって、niceコマンドの時のように「–15」と打つ必要はありません。


まとめ

今回は、プロセスの優先度の変更について解説しました。
最後に確認問題で今回学習した内容を是非確かめてください。


確認問題

問題

niceコマンドを使用してプロセスを開始する際、デフォルトのniceレベルはどれですか?

A) 10
B) 0
C) -10
D) 19

解答・解説
答え:B

A) ⇒ 正解です。
B) ⇒ niceを使用しない場合のデフォルトのナイス値です。
C) ⇒ 不正解です。
D) ⇒ 不正解です。