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
制限を無視するように使用しますが、nice
C 関数 (Python によって直接使用される) は気にします。プロセスの優先度が 20 以上の場合、nice
は優先度を 19 に設定しようとしますが、これは許可されていません (特権ユーザーのみが実行できるプロセスの優先度を上げるため)。
これは奇妙なバグですが、プロセスの優先度を 20 にしないことで簡単に回避できます。