Python-уменьшить значение приятности

используя 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

однако уменьшение приятности процесса, похоже, не допускается:

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

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

Как правильно это сделать? А храповой механизм-это ошибка или особенность?

2 ответов


Linux, по умолчанию, не позволяет непривилегированным пользователям уменьшать хорошее значение (т. е. увеличивать приоритет) своих процессов, так что один пользователь не создает высокоприоритетный процесс, чтобы заморить других пользователей. Python просто пересылает ошибку, которую ОС дает вам в качестве исключения.

пользователь root может увеличить приоритет процессов, но запуск от имени root имеет другие последствия.


это не ограничение Python или os.nice интерфейс. Это описано в man 2 nice что только суперпользователь может уменьшить тонкость процесса:

nice () добавляет inc к значению nice для вызывающего процесса. (А выше хорошее значение означает низкий приоритет.) Только суперпользователь может указать отрицательное приращение или увеличение приоритета. Диапазон значений nice описанные в getpriority(2).