Изменить приоритет текущего процесса в C - PullRequest
11 голосов
/ 27 августа 2008

В Windows я могу сделать:

HANDLE hCurrentProcess = GetCurrentProcess();

SetPriorityClass(hCurrentProcess, ABOVE_NORMAL_PRIORITY_CLASS);

Как я могу сделать то же самое на * nix?

Ответы [ 3 ]

23 голосов
/ 27 августа 2008

Попробуйте:

#include <sys/time.h>
#include <sys/resource.h>

int main(){
    setpriority(PRIO_PROCESS, 0, -20);
}

Обратите внимание, что вы должны быть суперпользователем, чтобы это работало.

(для получения дополнительной информации введите «man setpriority» в командной строке.)

5 голосов
/ 13 сентября 2008

Если вы делаете что-то подобное в Unix, вы хотите (от имени root) выполнить chmod и установить бит s. Затем вы можете изменить, с кем вы работаете, каков ваш приоритет, расписание потоков и т. Д. Во время выполнения.

Это замечательно, если вы не пишете массовое многопоточное приложение с ошибкой в ​​нем, так что вы берете на себя 48 процессорных блоков, и никто не сможет выключить вас, потому что каждый ваш процессор вращается на 100% со всеми установленными потоками в SHED_FIFO (работает до завершения) работает от имени пользователя root.

Нет ... Я бы не стал говорить по опыту ....

2 голосов
/ 27 августа 2008

@ allain

Можете ли вы снизить приоритет собственного процесса, не будучи суперпользователем?

Конечно. Имейте в виду, однако, что это улица с односторонним движением. Вы даже не можете вернуться туда, откуда начали. И даже довольно небольшое снижение приоритета может оказать поразительно большое влияние на время работы, когда в системе имеется значительная нагрузка.

...