nice și renice în Linux / Bash

Procese și monitorizare POSIX / GNU coreutils (nice), util-linux (renice)

Pornește o comandă cu altă prioritate de procesor (nice) sau schimbă prioritatea unui proces care rulează deja (renice).

Sintaxă comandă
nice [-n ajustare] comandă [argumente]
renice [-n] prioritate -p PID

Ce face nice și renice

Fiecare proces are o valoare niceness între -20 (prioritate maximă) și 19 (prioritate minimă); valoarea obișnuită este 0. Un proces „mai drăguț” (valoare mai mare) cedează procesorul mai ușor celorlalte procese.

nice pornește o comandă nouă cu valoarea ajustată (implicit +10). renice schimbă valoarea unui proces existent, după PID (-p), utilizator (-u) sau grup de procese (-g).

Orice utilizator își poate micșora prioritatea (valori pozitive). Creșterea priorității (valori negative, sau scăderea valorii unui proces) cere drepturi de root. Prioritatea contează doar când procesorul este ocupat; pe un server liber, efectul nu se vede.

Opțiuni și argumente

Opțiune / Parametru Descriere
nice -n N comandă Pornește comanda cu niceness-ul curent plus N.
nice comandă Fără -n, ajustarea implicită este 10.
renice -n N -p PID Setează niceness-ul N pentru procesul PID.
renice -n N -u UTILIZATOR Aplică valoarea tuturor proceselor unui utilizator.
ps -o ni Coloana NI arată niceness-ul unui proces (și în top/htop).

Exemple

Exemplul 1: Valoarea niceness înainte și după

Afișăm niceness-ul shell-ului, apoi pe al unei comenzi pornite cu nice -n 10 și pe al unui proces căruia îi schimbăm valoarea cu renice. tr -d elimină spațiile de aliniere din ieșirea lui ps.

echo "Normal: $(ps -o ni= -p $$ | tr -d ' ')"
nice -n 10 bash -c 'echo "Cu nice -n 10: $(ps -o ni= -p $$ | tr -d " ")"'
bash -c 'renice -n 5 -p $$ > /dev/null; echo "După renice: $(ps -o ni= -p $$ | tr -d " ")"'

Rezultat

Normal: 0
Cu nice -n 10: 10
După renice: 5

Exemplul 2: Backup cu prioritate mică pe un server ocupat

Arhivarea rulează în fundal cu niceness 19, ca site-ul să rămână rapid pentru vizitatori. $! este PID-ul ultimei comenzi pornite în fundal, iar coloana NI confirmă valoarea.

nice -n 19 tar -czf /backup/site_$(date +%F).tar.gz /var/www/dexblog &
ps -o pid,ni,comm -p $!

Ieșire în terminal

[1] 51842
    PID  NI COMMAND
  51842  19 tar

Exemplul 3: Creșterea priorității unui proces (necesită root)

renice afișează valoarea veche și pe cea nouă.

sudo renice -n -5 -p 2310

Ieșire în terminal

2310 (process ID) old priority 0, new priority -5

Greșeli frecvente

  • Confuzia de sens: o valoare nice mai mare înseamnă prioritate mai mică, nu mai mare.
  • Așteptarea ca nice să limiteze consumul de procesor: pe un sistem liber, procesul folosește tot procesorul disponibil. Pentru limite reale se folosesc cgroups (de exemplu CPUQuota= în systemd).
  • Încercarea de a reduce valoarea fără sudo: utilizatorii obișnuiți pot doar să crească niceness-ul.

Comenzi înrudite

  • ps: Afișează o captură instantanee (snapshot) a proceselor active din sistem.
  • top: Monitorizează interactiv și în timp real procesele, încărcarea procesorului și memoria RAM.
  • htop: Monitor de sistem interactiv, colorat și intuitiv pentru resurse, memorie și procese.
  • systemctl: Controlează sistemul de inițializare systemd și administrează serviciile (demoni de fundal).