GNU/Linuxにおけるプロセスの優先度指定について
GNU/LinuxのOS上で動作しているプログラムは優先度が指定でき、プロセス起動時に指定することも動作時に変更することもできる。
優先度とその値について
プロセスの優先度は40段階のnice値という情報によって管理される。値は-20から19*1の値をとり、標準の値は0だが、値が大きいほうが優先度は低く、この点において多少ややこしいため、「『他のプロセスに先を譲る度合い』が『niceである度合い/niceさ*2』」、「遠慮するプロセスはniceである」という理解をしたほうが分かりやすいかもしれない。19 ... 0 ... -20 (優先されない) (標 準) (優先される) (他のプロセスに (他のプロセスに 先を譲る) 先を譲らない) (niceである) (niceではない)
管理者権限のユーザは0よりも高い優先度の値(-1から-20)に設定することができるが、一般ユーザは原則として「自分の権限で動作するプロセスについて0から19の値でのみ」という制約のもとでnice値が設定できる。ただし、/etc/security/limits.confの設定を変更後ログアウト/ログインを行うことで、この制約の度合いは変更できる。
例えば
ファイル名: /etc/security/limits.conf
[ユーザ名] - nice -10
という設定を追加した場合、そのユーザのみ、19から-10の範囲でnice値が変更できるようになる。ユーザ名の部分は「@[グループ名]」としてグループ単位で設定することもできる。
nice値の指定
プロセスの起動時にnice値を指定する
プロセスを起動する際、実行するコマンド行の先頭に「nice -n [nice値]」を付けることにより、nice値が適用された状態で実行(起動)できる。nice値の既定値は10(「-n 10」と等価)*3だが、「10」を指定する場合でも(省略せず)「-n 10」としたほうが分かりやすい気がする。(推奨する書式) $ nice -n [nice値] [コマンド] ([コマンドへの引数...]) (おすすめしない書式) $ nice -[nice値] [コマンド] ([コマンドへの引数...])
2つ目の書式では「-5」でnice値5、「--5」でnice値-5となり紛らわしいため、おすすめはできない。
なお、変更する権限のない値を指定すると
nice: cannot set niceness: 許可がありません
となる。
実行中のプロセスのnice値を変更する
実行中のプロセスに対してreniceコマンドを実行することにより、そのプロセスのnice値を変更できる。プロセスID以外にユーザ名やプロセスグループID*4による指定も行えるが、プロセスIDを使用することが多い。新しいnice値は最初の引数にそのまま指定し、ハイフンなどは付けない。「5」ではnice値5、「-5」ではnice値-5となる。
$ renice [新しいnice値] -p [プロセスID]
変更に成功すると
[プロセスID]: 古い優先度は [古いnice値]、新たな優先度は [新しいnice値] です
と表示される。変更する権限のない値を指定すると
renice: [プロセスID]: setpriority: 許可がありません
となる。
下はプロセスIDを調べるための作業例。
(自分の権限で動作するプロセスとそのプロセスIDを一覧) $ ps -U $(whoami) -o args:74,pid (自分の権限で動作するプロセスとプロセスIDの一覧から絞り込む) $ ps -U $(whoami) -o args:74,pid | grep "[文字列]"
下はプロセス名の一部の文字列を指定して、マッチする全てのプロセスのnice値を一括変更する。
$ for pid in $(pgrep [プロセス名の一部]); do renice [新しいnice値] -p ${pid}; done; unset pid
もちろん、プロセスIDはデスクトップ環境のシステムモニタ/タスクマネージャの類(GUIツール)から確認することもできる。
nice値の確認
psコマンド
psでは-oオプションで指定できるフォーマットの「nice」でnice値が得られる。(現在のユーザの権限で実行している全プロセスのコマンド行とnice値の一覧) $ ps -U $(whoami) -o args:76,nice (上の一覧にプロセスIDを追加) $ ps -U $(whoami) -o args:70,pid,nice
もちろん「| grep "[文字列]"」での絞り込みも可能。
topコマンド
topでは「NI」という項目にそのプロセスのnice値が表示される。GUIツール
プロセスIDと同様、nice値もデスクトップ環境のシステムモニタ/タスクマネージャの類から確認できる。(2015/1/14)manページのリンク先を修正
関連URL:
使用したバージョン: