Kommandoene `nice` og `renice` gir deg mulighet til å finjustere hvordan operativsystemkjernen håndterer prosessene dine ved å justere deres prioritet. Denne veiledningen viser deg hvordan du bruker disse kommandoene i Linux og Unix-lignende systemer, som macOS.
Prosessenes verden
I en Linux- eller Unix-basert datamaskin er det alltid mange prosesser som kjører, selv før du starter dine egne programmer. Mange av disse prosessene er kritiske for selve operativsystemet, eller de støtter det grafiske grensesnittet. Det foregår mye i bakgrunnen. Det er begrenset med systemressurser og prosessortid tilgjengelig. Kjernen i Linux styrer alle disse prosessene.
Det er kjernen som bestemmer hvilke prosesser som skal få ressurser og oppmerksomhet når, og hvilke som må vente. Kjernen balanserer hele tiden prosesser og prioriteter for å sikre at datamaskinen fungerer så smidig som mulig, og at alle prosesser får sin rettmessige del. Noen prosesser prioriteres høyere. De er så viktige for maskinens drift at deres behov må komme før for eksempel nettleseren din.
Nice-verdien
En viktig faktor for kjernens prosesshåndtering er den såkalte «nice»-verdien. Hver prosess har en slik verdi, som er et heltall mellom -19 og 20. Som standard starter alle prosesser med en nice-verdi på null.
Det som er viktig å huske, er at jo høyere nice-verdien er, jo mer «snill» er prosessen mot andre prosesser. En høy nice-verdi forteller kjernen at prosessen gjerne kan vente. En negativ verdi betyr det motsatte. Jo mer negativ verdien er, jo mer «egoistisk» er prosessen, og den forsøker å skaffe seg så mye prosessortid som mulig, uavhengig av andre prosesser.
Vi bruker kommandoen `nice` for å sette nice-verdien når en prosess startes. Kommandoen `renice` brukes for å justere nice-verdien til en prosess som allerede kjører.
Kommandoen `nice`
Vi kan bruke `nice`-kommandoen til å justere nice-verdien for et program når vi starter det. Dette lar oss øke eller redusere prioriteten kjernen gir prosessen, i forhold til andre prosesser.
La oss anta at en utvikler har skrevet et program som heter `ackermann`. Dette programmet beregner Ackermann-funksjonen, og krever mye prosessorkraft og minne. Utvikleren kan starte programmet slik:
./ackermann
Vi kan bruke kommandoen `top` for å se programmet som kjører:
top
Vi ser detaljene for `ackermann`-programmet øverst. Nice-verdien vises i kolonnen «NI», og den er som forventet satt til null.
La oss starte programmet på nytt, men denne gangen gjør vi det mindre krevende. Vi gir `ackermann`-programmet en nice-verdi på 15. Vi skriver `nice`, mellomrom, `-15`, mellomrom igjen, og deretter navnet på programmet vi ønsker å starte. I vårt eksempel er dette `./ackermann`.
nice -15 ./ackermann
Merk at «-15» ikke betyr negativ femten. Det er positivt femten. Bindestreken «-» brukes for å indikere at vi sender inn en parameter. For å angi en negativ verdi, må du bruke to bindestreker «–«.
Starter vi `top` igjen, kan vi se hvordan `ackermann` oppfører seg:
top
Med en nice-verdi på 15 bruker ikke `ackermann` mest prosessortid. GNOME og Rhythmbox bruker mer. Vi har nå begrenset `ackermann` litt.
La oss nå gjøre det motsatte og gi `ackermann` en negativ nice-verdi. Her er det viktig å merke seg bruken av to bindestreker «–«. For å gjøre en applikasjon mer «egoistisk» og mindre «snill», må du bruke `sudo`. Hvem som helst kan gjøre sine applikasjoner mer «snille», men kun superbrukere kan gjøre dem mer «egoistiske».
sudo nice --10 ./ackermann
La oss starte `top` og se hva det har gjort:
top
Denne gangen har `ackermann` en nice-verdi på -10. Den er tilbake på toppen av listen og bruker mer prosessortid enn tidligere.
Kommandoen `renice`
Kommandoen `renice` lar oss justere nice-verdien for en prosess som allerede kjører. Vi trenger ikke stoppe den og starte den på nytt med `nice`. Vi kan endre verdien «on the fly».
`renice`-kommandoen trenger prosess-ID, eller PID, for prosessen som argument. Vi kan enten hente ut PID-en fra «PID»-kolonnen i `top`, eller vi kan bruke `ps` og `grep` for å finne den, slik som dette. Husk å erstatte «dave» med ditt eget brukernavn, og «ackermann» med navnet på prosessen du er interessert i.
ps -eu dave | grep ackermann
Nå som vi har PID-en, kan vi bruke den med `renice`. Vi skal gjøre `ackermann` mer «snill» igjen, med en nice-verdi på fem. For å endre nice-verdien for en prosess som kjører, må du bruke `sudo`. Merk at det ikke er noen bindestrek «-» foran parameteren 5. Du trenger ikke bindestrek for positive tall, og du trenger bare en, ikke to, for negative tall.
sudo renice -n 5 2339
Vi får bekreftet at `renice` har endret nice-verdien. Kommandoen viser både den gamle og den nye verdien.
Kjernen gjør vanligvis en god jobb med å håndtere prioriteringer og dele ut prosessortid og systemressurser. Men hvis du har en lang, ressurskrevende oppgave som skal kjøres, og du ikke bryr deg om når den er ferdig, vil maskinen kjøre litt smidigere hvis du setter en høyere nice-verdi for oppgaven. Det vil være mer «snilt» for alle.