プロセスの優れた価値を高めるためにreniceを使用できないのはなぜですか?


25

からman renice

スーパーユーザー以外のユーザーは、所有するプロセスの優先度のみを変更でき、0からPRIO_MAX(20)の範囲内で(セキュリティ上の理由で) `` nice value ''を単調に増加させることしかできません [...]

したがって、私はrenice自分のプロセスを上向きにすることができます(優先順位を低くします)が、下向きにすることはできません:

$ renice 10 22316
22316 (process ID) old priority 0, new priority 10
$ renice 9 22316
renice: failed to set priority for 22316 (process ID): Permission denied

どうしてこれなの?通常のユーザーが0未満のナイス値を設定できない理由を理解できますが、なぜ優先順位を10に下げることができるのに再び9に上げることができないのですか?これにはどのような「セキュリティ上の理由」がありますか?私は、9という素晴らしい値を持つプロセスを起動する権利を持っているのに、なぜ9までそれを放棄できないのですか?


編集:私は下にスクロールすることを学ぶ必要があります。これがバグとしてリストされていることがわかりman reniceます:

BUGS
     Non super-users can not increase scheduling priorities of their own
     processes, even if they were the ones that decreased the priorities 
     in the first place.

それはさらに紛らわしいです。彼らがこの行動をバグだと考えているのなら、なぜそれを変えてみませんか?reniceコマンドは、私は1980年からこれは非常に簡単である必要があり、彼らはそれを残すことを選択したように見える一方ではとても修正し、他方で、彼らはバグとしてそれをリストアップすることだと思い、4.0BSDで登場しました。


システムプロセスまたはセキュリティモジュールによって0よりも高い優先順位が強制される場合があり、ユーザーが決して下げることはできません(また、固定値0以外の特定のユーザープロセスの最小の良さを定義するのに十分な制御はありません) ?わからないので、推測ではありません。
lgeorget 14年

回答:


19

Linux 2.6.12以降、これはRLIMIT_NICE制限(ulimit -e)の値に依存します。0から40までの値を取ることができます。その制限は、プロセスの優先順位の制限です(その数値が大きいほど、ユーザーがプロセスに設定できる優先順位が高くなります)。

デフォルト値は、ubuntu 10.04では20、Debian jessieでは0です。

nその制限の値は、CAP_NICE機能を持たないプロセスがプロセスの優先度を最高までしか上げることができないことnを意味し20 - nます。したがって、値が0の場合、非特権ユーザーがnicenessを20未満に下げることはできないため、非特権ユーザーはnicenessを下げることができません。

値が20の場合、特権のないユーザーはniceを0に戻すことができます。

ユーザーがプロセスの優先順位を下げることを許可するかどうか、およびそのハード制限を設定してどのレベルにするかを選択するのは、管理者の責任です。

管理者がユーザーにプロセスの優先順位を下げることを望まない理由については、Flupの回答を参照してください。


1
あ!構成可能です!わかりました、ありがとうございます。
テルドン

「0〜40の値。[...]デフォルト値は、ubuntu 10.04では20、Debian jessieでは0です。」->私にとって興味深い、ハード/ソフトulimitsは、debian jessieでは実際に0です。最大20まで上げることができますが、それを超えると「bash:ulimit:スケジューリング優先度:制限を変更できません:無効な引数」が返されます。負の値も受け入れられません。
トーマンスキー

20

それは私がポリシーの理由と呼ぶものです。これは、通常のユーザーが特権ユーザーのアクションをオーバーライドできないという考え方です。

あなたが巨大な共有サーバーのユーザーだとしましょう。他のユーザーに不利益をもたらす巨大なCPU占有プロセスを実行しています。システム管理者reniceは、あなたのことをあまり好きではないので、いくつかのプロセスを実行します。OSは誰がを実行したかを覚えていませんreniceが、通常のユーザーはアクションを元に戻せないことを知っています。このようにして、システム管理者は通常のユーザーのプロセスの優先順位を制御できます。


1
私はそれを理解できますが、それでもまだ奇妙に思えます。実際、私はそれがにバグとしてリストされていることにも気付きましたman renice
テルドン

3
バグのポイントは、「スーパーユーザー以外は、そもそも優先順位を下げたものであっても、自分のプロセスのスケジューリング優先順位を上げることはできない」ということだと思います。つまりrenice、特権ユーザー以外は偶発的な事態を元に戻せないということは、この強制の副作用です。
フラップ14年

7
なぜなら、システムは誰が優先順位を設定したか覚えていないからです。理想的には、ナイスレベルを上げてから下げたい場合、それは許可されます...しかし、システムは、誰が何をナイスしたかの記録を保持していないため、ブランケット禁止を課しています。reniceそれはrootやりました。
FLUP

1
@IwillnotexistIdonotexistは、多くのユーザーがいるシステムを考えています。システム管理者は、プロセスの優先度を5に上げ、私のプロセスの優先度を10に下げたいかもしれません。それでもまだ通常のユーザーの範囲内ですが、それを変更して必要なCPU時間を盗むことはできません。とにかく、Flupが説明したように、それがアイデアです。ただし、StephaneChazelasが説明したように、これは構成可能であるため、システム管理者が好みを選択することができます。
テルドン

1
「なぜ?」に対する答えは、「誰も修正するためのコードを書くのに十分な人がいなかったから」である可能性が高いです。Unixが最初に書かれたとき、プロセスの優先度を設定する人の追跡は、メモリ使用量とそれを更新する作業が、現代のマシンで、ただの元のポリシー維持したいサイトのためにこれを追跡するためのコードの書き込みにモチベーションの欠如を残し、無視できるのです「ユーザーのsysadminをオーバーライドすることはできませんが。」
alanc

-1

奇妙な?それは私のために働く

Linux clafujiu 2.6.32-57-generic #119-Ubuntu \
 SMP Wed Feb 19 01:04:55 UTC 2014 i686 GNU/Linux

$ renice 8 --pid 21122
21122: old priority 9, new priority 8
christian@clafujiu:~/tmp$ ps eo "%p %n"
  PID  NI
 4190   0
 8594   0
14684   0
21122   8
21146   0
21155   0
21209   0
christian@clafujiu:~/tmp$ renice 15 --pid 21122
21122: old priority 8, new priority 15
christian@clafujiu:~/tmp$ ps eo "%p %n"
  PID  NI
 4190   0
 8594   0
14684   0
21122  15
21146   0
21155   0
21211   0
christian@clafujiu:~/tmp$ renice 10 --pid 21122
21122: old priority 15, new priority 10
christian@clafujiu:~/tmp$ ps eo "%p %n"
  PID  NI
 4190   0
 8594   0
14684   0
21122  10
21146   0
21155   0
21213   0

2回目の編集

$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=10.04
DISTRIB_CODENAME=lucid
DISTRIB_DESCRIPTION="Ubuntu 10.04.4 LTS"

構成の変更

/etc/security/limits.conf

@audio          -       rtprio          100
@audio          -       nice            -10

そして、私はオーディオグルー​​プのメンバーです。これは、録音時のジャック/ハードルとバッファーxrunのレイテンシーを減らすためでした。

renice

$ renice --version
renice from util-linux-ng 2.17.2

あなたはどんなディストリビューションをしていますか?それは、AIX 6.2上でない
Kiwy

cat /etc/lsb*およびの出力も投稿してくださいrenice --version
テルドン

renice --version renice from util-linux-ng 2.17.2それでもAIX上でそれは不可能です
Kiwy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.