Как задать или изменить приоритет процесса в Linux?

  • 17.12.2018
  • 39 811
  • 5
  • 23.11.2020
  • 65
  • 64
  • 1
Как задать или изменить приоритет процесса в Linux?

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

Что такое приоритет процесса?

Приоритет процесса определяет, как часто именно этот процесс, по сравнению с другими запущенными процессами, стоящими в очереди на выполнение, будет исполняться процессором. В ОС Linux значение приоритета процесса варьируется в диапазоне значений от -20 до 19 (т.е. получается 40 возможных значений: -20, -19, -18 ... 0, 1, 2 ... 19) и называется niceness (сокращенно NI).

Чем меньше это значение, тем выше приоритет будет у такого процесса. Например, если у нас есть один процесс, работающий с приоритетом 10, а другой процесс работающий с приоритетом 15, то в первую очередь будет выполняться процесс приоритетом 10, а уже после него, тот, где приоритет 15. А в ситуации, когда есть 2 процесса и у одного из них приоритет будет равен -20, а у другого равен 10, то в первую очередь процессор будет обрабатывать тот процесс, у которого приоритет равен -20, а уже после тот, у которого приоритет равен 10.

Как узнать приоритет процесса?

С помощью команды top (все запущенные процессы)

Посмотреть приоритет процесса можно с помощью команды top

С помощью команды ps (конкретный процесс(ы) по его имени)

ps -o pid,comm,nice -C mysqld
  PID COMMAND          NI
  706 mysqld            0

С помощью команды ps (конкретный процесс по его PID)

ps -o pid,comm,nice 706
  PID COMMAND          NI
  706 mysqld            0

Задание приоритета при запуске процесса

Для того, чтобы задать приоритет при старте нового процесса, необходимо воспользоваться командой nice
nice -n [значение приоритета] [команда]
Запустить утилиту top с приоритетом 15:

nice -n 15 top

Изменение приоритета у существующего процесса

Для того, чтобы изменить приоритет у существующего процесса (т.е. такого процесса, который ранее был уже запущен), необходимо воспользоваться командой renice
renice [значение приоритета] -p [id процесса]

При понижении приоритета у процесса, который является вашим (т.е. запущен под той же учетной записью, под которой вы работаете в системе) - права суперпользователя не требуются, НО при повышении приоритета у процесса, требуется запускать команду renice с правами суперпользователя, т.е. с помощью sudo renice.
В противном случае, вы будете получать ошибку примерно такого содержания:

renice: failed to set priority for 91197 (process ID): Permission denied

sudo renice 0 -p 15483
15483 (process ID) old priority 15, new priority 0

Мы изменили приоритет у существующего процесса (команда top из предыдущего примера) с 15 на 0.

Была ли эта статья Вам полезна?

Комментарии к статье (5)

    • марал

    а если отказано в доступе, как исправить приоритет проецесса?

      • Recluse

      Вы работаете под суперпользователем root? Если нет, то используйте команду sudo или su.

      • AJIekceu4

      Добавил информацию в статью:

      При понижении приоритета у процесса, который является вашим (т.е. запущен под той же учетной записью, под которой вы работаете в системе) - права суперпользователя не требуются, НО при повышении приоритета у процесса, требуется запускать команду renice с правами суперпользователя, т.е. с помощью sudo renice.

    • Сергей

    было бы еще неплохо добавить шпаргалку, как повесить приоритет по умолчанию для какой-нибудь программы, например на тот же mysql

    • Сергей

    очень полезная статья, каждый раз узнаю здесь что-то новое

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Напоминаем Вам, что Ваше сообщение будет опубликовано только после проверки администратором сайта. Обычно это занимает 1-2 рабочих дня.