2015-12-11 32 views
4

使用Python,我可以轻松地提高当前进程的nice值:Python的 - 减少正派值

>>> import os 
>>> import psutil 

>>> # Use os to increase by 3 
>>> os.nice(3) 
3 

>>> # Use psutil to set to 10 
>>> psutil.Process(os.getpid()).nice(10) 
>>> psutil.Process(os.getpid()).nice() 
10 

然而,减少进程的nice值似乎并没有被允许:

>>> os.nice(-1) 
OSError: [Errno 1] Operation not permitted 

>>> psutil.Process(os.getpid()).nice(5) 
psutil.AccessDenied: psutil.AccessDenied (pid=14955) 

什么是正确的如何做到这一点?棘轮机制是一个错误还是一个特征?

回答

5

Linux在缺省情况下不允许非特权用户降低其进程的nice值(即增加优先级),以便一个用户不会创建高优先级进程来饿死其他用户。 Python只是将操作系统给你的错误转发为例外。

root用户可以提高进程的优先级,但以root身份运行有其他后果。

2

这不是Python或os.nice接口的限制。在man 2 nice中描述了只有超级用户可以降低进程的好处:

nice()将inc添加到调用进程的nice值。 (更高的 好值意味着低优先级。)只有超级用户可以指定 负增量或优先级增加。在getpriority(2)中描述的漂亮值的范围是 。