Как да зададете приоритети на процеса с nice and renice на Linux

Командите nice и renice ви позволяват да прецизирате начина, по който ядрото третира вашите процеси, като коригира техните приоритети. Прочетете този урок, за да научите как да ги използвате в Linux и Unix-подобни операционни системи, като macOS.

Всичко е въпрос на процес

Във вашия компютър, подобен на Linux или Unix, ще има много процеси, работещи дори преди да стартирате приложението, което искате да използвате. По-голямата част от тези процеси са жизненоважни елементи на самия Linux или поддържащи процеси за вашата графична среда на работния плот. Има много неща, които се случват зад кулисите. Разбира се, има само толкова много системни ресурси и процесорно време. Ядрото на Linux е контролерът за всички тези процеси.

Ядрото е това, което трябва да реши кои процеси получават внимание и ресурси в момента и кои трябва да изчакат. Ядрото непрекъснато жонглира процесите и приоритетите, за да гарантира, че компютърът работи възможно най-гладко и че всички процеси получават подходящия си дял. Някои процеси получават преференциално третиране. Те са толкова важни за общата работа на компютъра, че техните нужди трябва да са на първо място пред, да речем, вашия браузър.

Хубавата стойност

Един от критериите, използвани за определяне как ядрото третира даден процес, е добрата стойност. Всеки процес има приятна стойност. Добрата стойност е цяло число в диапазона от -19 до 20. Всички стандартни процеси се стартират с добра стойност нула.

  Как да преместите вашата домашна директория на Linux на друг диск

Номерът тук е, че колкото по-висока е стойността на nice, толкова по-приятен е вашият процес спрямо другите процеси. С други думи, висока стойност nice казва на ядрото, че този процес е щастлив да изчака. Отрицателното число е обратното на това да си добър. Колкото по-голяма е отрицателната стойност на nice, толкова по-егоистичен е процесът. Опитва се да получи колкото може повече процесорно време, без да се съобразява с другите процеси.

Можем да използваме командата nice, за да зададем стойността nice, когато a процесът се стартира и можем да използваме renice, за да коригираме стойността nice на работещ процес.

Хубавата команда

Можем да използваме командата nice, за да коригираме стойността nice за програма, докато я стартираме. Това ни позволява да увеличим или намалим приоритета, даден на процеса от ядрото, спрямо другите процеси.

Да предположим, че програмист е написал програма, наречена ackermann. Това изчислява Функции на Акерман. Занимава се с процесор и памет. Програмистът може да стартира програмата със следната команда:

./ackermann

Можем да използваме командата top, за да видим работещата програма.

top

Можем да видим подробностите за програмата на ackermann отгоре. Хубавата стойност е цифрата в колоната „NI“. Настрои се на нула, както очаквахме.

  Systemd ще промени начина, по който работи вашата домашна директория на Linux

Нека го рестартираме и този път да го направим по-малко взискателен. Ще зададем добра стойност от 15 за програмата на ackermann, както следва. Въведете nice, интервал, -15, друг интервал и след това името на програмата, която искате да стартирате. В нашия пример нашият фиктивен програмист използва ./ackermann.

nice -15 ./ackermann

Обърнете внимание, че „-15“ не е минус петнадесет. Положително е петнадесет. “-” се изисква, за да каже на nice, че предаваме параметър. За да посочите отрицателно число, трябва да въведете два знака „-“.

Ако сега започнем отново отгоре, можем да видим промяната в поведението на акерман.

top

С добра стойност от 15, ackermann не консумира най-много процесорно време. GNOME и Rhythmbox използват повече. Обуздахме Акерман след малко.

Сега нека направим обратното и да дадем на ackermann отрицателна хубава стойност. Обърнете внимание на използването на два знака „-“. За да направите приложението по-егоистично и по-малко приятно, трябва да използвате sudo. Всеки може да направи приложението си по-приятно, но само суперпотребителите могат да направят едно по-егоистично.

sudo nice --10 ./ackermann

Нека бягаме отгоре и да видим каква е разликата.

top

Този път ackermann има хубава стойност от -10. Връща се на горната линия и консумира повече процесорно време от преди.

Командата renice

Командата renice ни позволява да коригираме хубавата стойност на работещ процес. Не е нужно да го спираме и да го пускаме отново с nice. Можем да зададем нова стойност в движение.

  Как да клонирате вашата инсталация на Linux с Clonezilla

Командата renice приема идентификатора на процеса или PID на процеса като параметър на командния ред. Можем или да извлечем идентификатора на процеса от колоната „PID“ в горната част, или можем да използваме ps и grep, за да го намерим за нас, както следва. Очевидно ще въведете името на вашия потребител вместо dave и името на процеса, който ви интересува, вместо ackermann.

ps -eu dave | grep ackermann

Сега, когато имаме PID, можем да използваме това с renice. Ще върнем акерман към по-добро поведение с добра стойност от пет. За да промените добрата стойност за работещ процес, трябва да използвате sudo. Имайте предвид, че няма „-“ в параметъра 5. Не ви трябва едно за положителни числа и ви трябва само едно, а не две за отрицателни числа.

sudo renice -n 5 2339

Получаваме потвърждение, че renice е променила стойността на nice. Показва ни старата стойност и новата стойност.

Ядрото обикновено върши страхотна работа за обработка на приоритетите и раздаване на процесорно време и системни ресурси. Но ако трябва да изпълнявате дълга, процесорно интензивна задача и не ви пука кога тя приключи, това ще направи компютъра ви да работи малко по-гладко, ако зададете по-висока добра стойност за тази задача. Така ще бъде по-хубаво за всички.