このすみ技術ろぐ

とあるWebエンジニアが、技術や趣味について書くブログです。

【Linux】reniceコマンドのpermission deniedは、一般ユーザーがプロセス優先度を上げようとしたときでも発生する

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のプロセス周りは勉強していきたいと思います。