0

OS Xos.nice(10)で失敗するのはなぜですか? OSError: [Errno 1] Operation not permitted標準ユーザー アカウントからの実行:

$ python
…
>>> os.nice(10)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 1] Operation not permitted

詳細:

  • パイソン 2.7.2
  • OS X 10.8.4
4

2 に答える 2

4

Lukas Graf が指摘したようにos.nice、ナイス レベルを設定するのではなく、インクリメントします。

これは、代わりに OS X のバグのように見えます。20nice以上の優先度のナイスで座っているときに呼び出すとトリガーされます。

nice -n 20 python -c 'import os; os.nice(10)'

失敗しますが、

nice -n 19 python -c 'import os; os.nice(10)'

動作します。単純な C プログラムでも同じ問題が発生します。

#include <unistd.h>
#include <string.h>

int main() {
    if(nice(10) < 0)
        perror("nice");
}

として実行するとエラーが出力されますが、として実行するとnice -n 20 ./test成功しnice -n 19 ./testます。


niceこれは、ナイス レベル 20 が、 APIでサポートされているナイス レベルの最大値を超えているためです( NZERO)。OS X のniceユーティリティはsetpriority制限を無視するように使用しますが、niceC 関数 (Python によって直接使用される) は気にします。プロセスの優先度が 20 以上の場合、niceは優先度を 19 に設定しようとしますが、これは許可されていません (特権ユーザーのみが実行できるプロセスの優先度を上げるため)。

これは奇妙なバグですが、プロセスの優先度を 20 にしないことで簡単に回避できます。

于 2014-09-10T19:30:40.913 に答える
1

あなたの PRIO_MAX が何であるか、および非スーパーユーザーによる使用が許可されているナイスネスを確認してください

スーパーユーザー以外のユーザーは、自分が所有するプロセスの優先度を変更することしかできず、0 から PRIO_MAX (20) の範囲内で「nice 値」を単調に単調に増加させることしかできません。

https://developer.apple.com/library/mac/documentation/Darwin/Reference/Manpages/man8/renice.8.html

于 2014-09-10T19:32:21.613 に答える