Hur man ställer in processprioriteringar med nice och renice på Linux

By rik

Med kommandona nice och renice kan du förfina hur operativsystemets kärna hanterar dina processer genom att justera deras prioritet. Den här guiden förklarar hur du använder dem i Linux och andra Unix-baserade system som macOS.

Processernas betydelse

Även innan du startar dina egna applikationer, finns det många processer aktiva i din dator. De flesta är viktiga delar av operativsystemet eller stödprocesser för din grafiska miljö. Det är mycket som händer i bakgrunden, och systemresurserna och CPU-tiden är begränsade. Linuxkärnan är den enhet som styr alla dessa processer.

Kärnan bestämmer vilka processer som får uppmärksamhet och resurser vid en given tidpunkt och vilka som måste vänta. Kärnan balanserar kontinuerligt processer och prioriterar dem för att säkerställa att datorn fungerar så effektivt som möjligt och att alla processer får sin beskärda del. Vissa processer prioriteras. De är avgörande för att datorn ska fungera korrekt, så deras behov kommer före till exempel din webbläsares.

”Nice”-värdet för processer

En av faktorerna som kärnan använder för att bestämma hur en process ska hanteras är dess ”nice”-värde. Alla processer har ett sådant värde, som är ett heltal mellan -19 och 20. Som standard har alla processer startar med ett nice-värde på noll.

Ju högre nice-värde, desto mer ”snäll” är processen mot andra. Ett högt nice-värde indikerar för kärnan att processen gärna väntar på sin tur. Ett negativt tal är motsatsen. Ju lägre nice-värde (dvs. desto mer negativt tal), desto mer ”egoistisk” är processen. Den försöker få så mycket CPU-tid som möjligt, utan hänsyn till andra processer.

Kommandot `nice` används för att ange nice-värdet när en process startas. Kommandot `renice` används för att justera nice-värdet för en pågående process.

Kommandot ”nice”

Vi använder `nice`-kommandot för att ändra nice-värdet för en applikation när den startas. Det gör det möjligt att öka eller minska den prioritet som kärnan ger processen, relativt andra processer.

Antag att en utvecklare har skrivit ett program som heter `ackermann`. Programmet beräknar Ackermann-funktionen, vilket kräver mycket processorkraft och minne. Utvecklaren kan starta programmet med följande kommando:

./ackermann

Vi kan använda kommandot `top` för att visa det pågående programmet:

top

I `top`-utmatningen kan vi se detaljer om `ackermann`-programmet. Nice-värdet anges i kolumnen ”NI”. Det är inställt på noll, som förväntat.

Nu ska vi starta om programmet och göra det mindre resurskrävande. Vi sätter nice-värdet till 15 för `ackermann` med följande kommando: Skriv `nice`, ett mellanslag, `-15`, ett till mellanslag, och sedan namnet på programmet du vill starta. I vårt exempel använder vi `./ackermann`.

nice -15 ./ackermann

Observera att ”-15” inte är ”minus femton”. Det är ”positiv femton”. ”-” används för att signalera att vi skickar en parameter. För att ange ett negativt tal måste du använda två ”-”-tecken.

Om vi kör `top` igen kan vi se förändringen i `ackermanns` beteende.

top

Med ett nice-värde på 15 tar `ackermann` inte längre mest CPU-tid. GNOME och Rhythmbox använder båda mer. Vi har begränsat `ackermanns` resursanvändning.

Nu ska vi göra tvärtom och ge `ackermann` ett negativt nice-värde. Observera att vi använder två ”-”-tecken. För att göra en applikation mer självisk och mindre ”snäll” måste du använda `sudo`. Alla kan göra sin applikation ”snällare”, men bara superanvändaren kan göra den mer ”egoistisk”.

sudo nice --10 ./ackermann

Låt oss köra `top` för att se hur det har påverkat processen:

top

Denna gång har `ackermann` ett nice-värde på -10. Den ligger nu i toppen av listan och förbrukar mer CPU-tid än tidigare.

Kommandot ”renice”

Med kommandot `renice` kan vi justera nice-värdet för en pågående process. Vi behöver inte stoppa processen och starta om den med `nice`. Vi kan ändra värdet direkt.

Kommandot `renice` tar process-ID:t (PID) för processen som en parameter. Vi kan antingen hämta process-ID:t från kolumnen ”PID” i `top`, eller så kan vi använda `ps` och `grep` för att hitta det åt oss, enligt följande. Ersätt `dave` med ditt användarnamn och `ackermann` med namnet på processen du är intresserad av.

ps -eu dave | grep ackermann

Nu när vi har PID, kan vi använda det med `renice`. Vi ska återställa `ackermann` till ett mer ”snällt” beteende med ett nice-värde på 5. För att ändra nice-värdet för en pågående process måste vi använda `sudo`. Observera att det inte finns något ”-” på parametern 5. Du behöver inget för positiva tal, och bara ett ”-” för negativa tal.

sudo renice -n 5 2339

Vi får en bekräftelse på att `renice` har ändrat nice-värdet. Den visar oss det gamla värdet och det nya värdet.

Kärnan gör i allmänhet ett bra jobb med att hantera prioriteringar och fördela CPU-tid och systemresurser. Men om du har en lång, CPU-krävande uppgift som du kan köra när som helst utan någon tidspress, så kommer det att göra din dator lite smidigare om du ställer in ett högre nice-värde för den uppgiften. Det kommer att vara ”snällare” för alla andra processer.