Perl setpriority функция на сервере CentOS - PullRequest
0 голосов
/ 03 мая 2018

Я использую CentOS 7 и cPanel на моем сервере. Я пытаюсь выяснить, как расставить приоритеты в задаче Perl, чтобы иметь НИЗКИЙ приоритет.

Когда я вызываю setpriority (PRIO_PROCESS, $$, 19), задача отображается в списке диспетчера задач (TOP) cPanel с приоритетом 19. Но в документации cPanel говорится, что диспетчер задач показывает значения от -20 до 20, где -20 - это самая низкая загрузка ЦП для этой задачи. Поэтому я пытаюсь вызвать setpriority (PRIO_PROCESS, $$, -19), но задача отображается в диспетчере задач cPanel как приоритет 0.

Поэтому я пытаюсь вызвать getpriority (PRIO_PROCESS, $$) сразу после setpriority. Если я вызываю setpriority с отрицательным значением приоритета, getpriority возвращает 0 для текущего процесса. Если я вызову setpriority с любым положительным значением, getpriority вернется с только что указанным значением.

Кажется, что диспетчер задач отображает те же положительные значения, которые я использую в setpriority, но игнорирует все отрицательные значения, которые я отправляю в setpriority.

Можно ли сказать, что CentOS отдает приоритет текущему процессу очень НИЗКО; то есть он отображается в диспетчере задач с приоритетом -19, что очень мало согласно документации cPanel?

Спасибо!

1 Ответ

0 голосов
/ 03 мая 2018

У тебя это задом наперед. В современных системах Linux диапазон составляет от -20 до 19, где -20 - это самый высокий приоритет, а 19 - это самый низкий . (В некоторых других системах он может быть равен 20).

Вы случайно пытались увеличить приоритет, когда указали отрицательные числа, но отсутствие разрешений (к счастью) помешало вам сделать это, поэтому приоритет остался по умолчанию 0. Первое, что вы должны были сделать это проверка на ошибки!

use constant PRIO_PROCESS => 0;

# $userland_priority ranges from -20 (highest) to 19 (lowest).
my $userland_priority = 19;

setpriority(PRIO_PROCESS, $$, $userland_priority)
   or die("setpriority: $!\n");
...