Команди 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”. Це дозволить вашому комп’ютеру працювати плавніше.