Як встановити пріоритети процесу за допомогою nice and renice в Linux

Команди nice та renice надають можливість точно регулювати, як операційна система обробляє запущені процеси, змінюючи їхні пріоритети. Цей посібник розповість, як ефективно використовувати ці інструменти в Linux та Unix-подібних системах, включно з macOS.

Керування процесами

Комп’ютери, що працюють на Linux або Unix, виконують безліч процесів, навіть перш ніж ви запустите потрібну програму. Більшість із них є критично важливими компонентами самої операційної системи або забезпечують роботу графічного інтерфейсу. За лаштунками відбувається багато дій, а системні ресурси та час процесора обмежені. Саме ядро Linux виступає регулятором для всіх цих процесів.

Ядро вирішує, які процеси потребують уваги та ресурсів негайно, а які можуть зачекати. Воно постійно перерозподіляє пріоритети, забезпечуючи плавну роботу комп’ютера та справедливий розподіл ресурсів між усіма процесами. Деякі процеси мають перевагу, оскільки вони критично важливі для загальної працездатності системи.

Поняття “nice”

Одним із критеріїв, що впливають на те, як ядро обробляє процес, є його “nice” значення. Кожен процес має таке значення, яке є цілим числом від -19 до 20. За замовчуванням, всі процеси запускаються зі значенням “nice” рівним нулю.

Чим вище значення “nice”, тим “доброзичливіший” процес до інших. Іншими словами, високе значення “nice” повідомляє ядру, що цей процес готовий почекати. Від’ємні значення навпаки, означають, що процес “егоїстичний” і намагається отримати якомога більше процесорного часу, незважаючи на інші процеси.

Команда nice дозволяє встановити значення “nice” під час запуску процесу, а renice дає змогу змінити це значення для вже запущеного процесу. Детальніше про команди можна дізнатися за посиланнями: nice та renice.

Використання команди “nice”

Команда nice дозволяє задати значення “nice” для програми під час її запуску, регулюючи її пріоритет відносно інших процесів.

Наприклад, припустимо, програміст створив програму ackermann, що обчислює функцію Аккермана. Це ресурсомістка програма. Звичайний запуск програми виглядає так:

./ackermann

За допомогою команди top можна переглянути інформацію про запущені процеси:

top

У виводі програми top, в колонці “NI” відображається поточне значення “nice” процесу. Для запущеної програми ackermann це значення дорівнює нулю.

Тепер, перезапустимо програму, зробивши її менш вимогливою, встановивши значення “nice” рівним 15. Для цього потрібно ввести команду nice, пробіл, -15 (зверніть увагу, що це не є від’ємне число, а параметр), пробіл, а потім назву програми:

nice -15 ./ackermann

Знову запустивши top, ми побачимо, що ackermann тепер має значення “nice” рівним 15, і використовує менше процесорного часу.

top

Щоб зробити програму більш “егоїстичною” та надати їй від’ємне значення “nice”, потрібно використовувати sudo, оскільки лише суперкористувач може підвищувати пріоритет процесу. Для цього використовуємо подвійний дефіс (--) перед значенням:

sudo nice --10 ./ackermann

Перевіривши за допомогою top, ми побачимо, що ackermann знову став споживати більше процесорного часу, маючи значення “nice” рівне -10.

top

Використання команди “renice”

Команда renice дозволяє змінити значення “nice” для вже запущеного процесу. Не потрібно його зупиняти і перезапускати. Ми можемо налаштувати пріоритет “на льоту”.

Команда renice приймає ідентифікатор процесу (PID) як аргумент. Цей ідентифікатор можна знайти в колонці “PID” виводу команди top, або за допомогою команд ps і grep, як показано нижче. Замініть dave на ім’я свого користувача, а ackermann на назву потрібного процесу.

ps -eu dave | grep ackermann

Знайшовши PID процесу, ми можемо використовувати його з командою renice. Наприклад, змінимо значення “nice” процесу ackermann на 5. Для цього потрібні права суперкористувача. Зауважте, що для позитивного значення параметра дефіс (-) не потрібен.

sudo renice -n 5 2339

Система підтвердить зміну значення “nice”, показавши старе та нове значення.

Зазвичай ядро чудово справляється з розподілом пріоритетів та системних ресурсів. Проте, якщо у вас є тривале ресурсомістке завдання, і ви не поспішаєте його завершити, варто надати йому вище значення “nice”. Це дозволить вашому комп’ютеру працювати плавніше.