Lから始まるLinux

2章38話
プロセス操作
2章39話 プロセス優先度
もくじ
2章40話
シェル変数
プロセス優先度
若木 みどり
お兄ちゃん! 重たい処理を動かしたら 他の処理に影響が出たんだ! キー入力にラグが出たりして 使いにくよ… なんとかならないかな?
若木 しげる
もちろん対応できるよ 今回はプロセスの 優先度を学んでいこう!
NICE値と優先度
若木 しげる
「NICE値」はプロセスの 優先度を決める数値だよ -2019 の範囲の 整数で指定するんだ 大きな値ほど優先度が低くなるよ
若木 しげる
「優先度(priority)」 「NICE値 + 20」で決められるよ
若木 みどり
プロセスの優先度は 0 39 の40段階なんだね こっちも大きいほど 優先度が低くなるんだ
若木 しげる
NICE値のデフォルトは 0 だよ 優先度で表すと 20 ということだね プロセスのNICE値を変えることで 優先度を管理するんだ
nice コマンド
若木 しげる
nice はNICE値を設定して コマンドを実行してくれるんだ
nice [-n NICE値] コマンド
若木 しげる
NICE値が指定されなければ10 が指定されるよ
若木 みどり
こうやって優先度を下げてコマンドを実行できるんだね逆に優先度を上げることもできるのかな?
若木 しげる
プロセスの優先度を上げるのは管理者の仕事なんだ一般ユーザは優先度を下げるしかできないよ
renice コマンド
若木 みどり
プロセスの優先度は動かしたタイミングでしか設定できないのかな?動かしたけど重たくて優先度を下げたいという場合もあると思うんだけど…
若木 しげる
そういう時は renice を使うよ動いているプロセスの優先度を変更するんだ
renice [-n NICE値] PID...
若木 しげる
NICE値の指定を +5 とすれば「現在の値から 5 増加」といった指定も可能だよ
若木 みどり(笑顔)
プロセスが動いた後もNICE値を変更できるんだね!
実践
若木 しげる
では実際にNICE値の変更をしてみよう!
若木 みどり
重たい作業を試したいんだけどどんなコマンドがいいかな?
若木 しげる
yes > /dev/null負荷をかける目的で使われることがあるんだこのコマンドにNICE値を指定してバックグラウンド実行してみよう
nice -n 5 yes > /dev/null &
若木 みどり
実行したよ!
[1] 4986
若木 みどり
ジョブ番号とPID が表示されたね!
若木 しげる
top はプロセスのCPU やメモリの使用状況を表示してくれるんだtop で確認してみよう
top
若木 みどり
うん、実行するね!
PID  USER     PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
...
4986 midori   25   5    3740   1792   1792 R  99.0   0.0   2:11.35 yes
...
若木 みどり(驚き)
おお!yes が CPU を食ってるね!
若木 しげる
PRNI という項目を見てみようこれが「優先度」「NICE値」を表しているよ
若木 みどり
優先度は 25NICE値が 5 だね!指定どおりのNICE値だし優先度も定義どおりの値だね!
若木 しげる
topq で終了するよ
若木 みどり
うん!元のシェルの画面に戻ったよ!
若木 しげる
今度は reniceプロセスのNICE値を変更してみよう
renice -n 19 4986
若木 みどり
うん!
4986 (process ID) old priority 5, new priority 19
若木 みどり
5 から 19 に変わった」と表示が出たよ!
若木 しげる
これで nicerenice を試せたねyes プロセスは CPU を占有し続けるので確認が済んだら停止させよう
kill 4986
若木 みどり(笑顔)
これで後片付けも完了だね!
まとめ
若木 みどり
今回はプロセスの優先度を表すNICE値とそれを変更するnice, renice を学んだよ!
若木 しげる
NICE値からプロセスの優先度を管理するよ重たいけど急がないプロセスがあれば優先度を下げて他の作業に支障が出ないようにしよう!