Командите nice и renice ви позволяват да прецизирате начина, по който ядрото третира вашите процеси, като коригира техните приоритети. Прочетете този урок, за да научите как да ги използвате в Linux и Unix-подобни операционни системи, като macOS.
Съдържание
Всичко е въпрос на процес
Във вашия компютър, подобен на Linux или Unix, ще има много процеси, работещи дори преди да стартирате приложението, което искате да използвате. По-голямата част от тези процеси са жизненоважни елементи на самия Linux или поддържащи процеси за вашата графична среда на работния плот. Има много неща, които се случват зад кулисите. Разбира се, има само толкова много системни ресурси и процесорно време. Ядрото на Linux е контролерът за всички тези процеси.
Ядрото е това, което трябва да реши кои процеси получават внимание и ресурси в момента и кои трябва да изчакат. Ядрото непрекъснато жонглира процесите и приоритетите, за да гарантира, че компютърът работи възможно най-гладко и че всички процеси получават подходящия си дял. Някои процеси получават преференциално третиране. Те са толкова важни за общата работа на компютъра, че техните нужди трябва да са на първо място пред, да речем, вашия браузър.
Хубавата стойност
Един от критериите, използвани за определяне как ядрото третира даден процес, е добрата стойност. Всеки процес има приятна стойност. Добрата стойност е цяло число в диапазона от -19 до 20. Всички стандартни процеси се стартират с добра стойност нула.
Номерът тук е, че колкото по-висока е стойността на nice, толкова по-приятен е вашият процес спрямо другите процеси. С други думи, висока стойност nice казва на ядрото, че този процес е щастлив да изчака. Отрицателното число е обратното на това да си добър. Колкото по-голяма е отрицателната стойност на nice, толкова по-егоистичен е процесът. Опитва се да получи колкото може повече процесорно време, без да се съобразява с другите процеси.
Можем да използваме командата nice, за да зададем стойността nice, когато a процесът се стартира и можем да използваме renice, за да коригираме стойността nice на работещ процес.
Хубавата команда
Можем да използваме командата nice, за да коригираме стойността nice за програма, докато я стартираме. Това ни позволява да увеличим или намалим приоритета, даден на процеса от ядрото, спрямо другите процеси.
Да предположим, че програмист е написал програма, наречена ackermann. Това изчислява Функции на Акерман. Занимава се с процесор и памет. Програмистът може да стартира програмата със следната команда:
./ackermann
Можем да използваме командата top, за да видим работещата програма.
top
Можем да видим подробностите за програмата на ackermann отгоре. Хубавата стойност е цифрата в колоната „NI“. Настрои се на нула, както очаквахме.
Нека го рестартираме и този път да го направим по-малко взискателен. Ще зададем добра стойност от 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. Можем да зададем нова стойност в движение.
Командата renice приема идентификатора на процеса или PID на процеса като параметър на командния ред. Можем или да извлечем идентификатора на процеса от колоната „PID“ в горната част, или можем да използваме ps и grep, за да го намерим за нас, както следва. Очевидно ще въведете името на вашия потребител вместо dave и името на процеса, който ви интересува, вместо ackermann.
ps -eu dave | grep ackermann
Сега, когато имаме PID, можем да използваме това с renice. Ще върнем акерман към по-добро поведение с добра стойност от пет. За да промените добрата стойност за работещ процес, трябва да използвате sudo. Имайте предвид, че няма „-“ в параметъра 5. Не ви трябва едно за положителни числа и ви трябва само едно, а не две за отрицателни числа.
sudo renice -n 5 2339
Получаваме потвърждение, че renice е променила стойността на nice. Показва ни старата стойност и новата стойност.
Ядрото обикновено върши страхотна работа за обработка на приоритетите и раздаване на процесорно време и системни ресурси. Но ако трябва да изпълнявате дълга, процесорно интензивна задача и не ви пука кога тя приключи, това ще направи компютъра ви да работи малко по-гладко, ако зададете по-висока добра стойност за тази задача. Така ще бъде по-хубаво за всички.