Linuxにはrenice
という、プロセスの優先度を変更するコマンドがあります。
LPICの問題集ではじめて知り、さっそく使ってみたのですが、不思議な挙動をすることに気づきました。
renice 19は成功するのに、renice 16は失敗する件
現在ログインしているコンソールのbashコマンドに対して、優先度を変更してみることにしました。 まずはpsコマンドで、対象のプロセスIDを調べます。
$ ps PID TTY TIME CMD 131 pts/2 00:00:00 bash 1236 pts/2 00:00:00 ps
bashのプロセスIDは131であることがわかったので、早速reniceコマンドを使ってみました。
$ renice 19 -p 131 131 (process ID) old priority 0, new priority 19 $ renice 16 -p 131 renice: failed to set priority for 131 (process ID): Permission denied
すると不思議なことに、renice 19
は成功するにもかかわらず、renice 16
は失敗していることがわかりました。
一般ユーザーは優先度を下げることはできるが、上げることはできない
renice
コマンドについて詳しく調べてみたところ、一般ユーザーとrootユーザーでは、権限に違いがあるとわかりました。
なお、一般ユーザーの場合、現在のnice値より小さく(優先度を高く)することはできません。特定プロセスの優先度を上げるために、自分が実行している他のプロセスの優先度を下げるといった使い方は可能です。
https://www.atmarkit.co.jp/ait/articles/1708/17/news017.html より
つまり、私が最初に実行したrenice 19
は優先度を下げるコマンドだったために成功し、その後のrenice 16
は優先度を上げるコマンドになったため失敗したというわけです。
さいごに
Linux上でプロセス優先度を下げることはできても、上げることはできないパターンが存在するというのは、知っておいて損はなさそうです。
実運用で明示的にプロセス優先度を変更したくなるケースは珍しいとは思いますが、Linuxについてまた少し詳しくなれたので、もう少しLinuxのプロセス周りは勉強していきたいと思います。