Su linux esiste un sistema per impostare/modificare la priorità dei processi, su cui l’utente può agire, per dare maggiore o minore priorità ai propri processi.
Per esempio state lanciando un backup con un rsync o facendo un tar, ma non volete che questi processi utilizzino tutta la vostra CPU, in questi casi potete fare uso del comando nice
.
nice
è un comando dei sistemi operativi Unix e Unix-like, e più in generale dei sistemi POSIX, che esegue un altro comando modificando il suo valore di nice.
Il valore di nice è un attributo numerico di ciascun processo dei sistemi Unix e Unix-like che è usato dallo scheduler per stabilire quanto tempo di CPU dedicare all’esecuzione del processo. A parità di priorità e di politica di schedulazione, i processi che hanno valori di nice maggiori ottengono in proporzione meno tempo di CPU rispetto a processi che hanno valori di nice minori, e quindi la loro esecuzione procede più lentamente, favorendo gli altri processi.
Per diminuire il valore di nice è necessario disporre dei privilegi dell’amministratore (root), mentre ciò non è necessario per aumentarlo. Tipicamente è possibile diminuire il valore di nice fino a 20 unità rispetto al valore predefinito, o aumentarlo fino a 19 unità: è possibile specificare scostamenti più ampi, ma essi sono automaticamente ricondotti entro i limiti sopra citati.
Una gentilezza (niceness) di -20 è la massima priorità e il 19 o 20 è la priorità più bassa. La niceness di default per i processi è ereditata dal proprio processo genitore, di solito è 0.
Sintassi base
nice -n [priority] [command] [arguments] |
Così si può dare a qualsiasi comando un valore di nice
la prima volta che si esegue.
Se si esegue il comando su un terminale senza dare un comando viene visualizzata il corrente valore di niceness.
Esempi:
# nice 0 # nice -n 19 gunzip /var/log/oldlogs* |
Controllo della priorità dei processi in esecuzione
Il modo più semplice per visualizzare la priorità per tutti i processi in esecuzione è quello di usare il comando top, vedrete che c’è una colonna NI, quello è il valore di nice per quel comando.
In alternativa (se si conosce il numero del pid) si può controllare il nice
di un singolo processo utilizzando il comando ps
con la seguente sintassi:
ps -o pid,comm,nice -p [PID] |
Cambiare il valore nice di processi esistenti
Come ho scritto il comando nice
è utilizzabile solo quando si esegue un comando per la prima volta, ma probabilmente si desidera modificare anche la priorità di un processo esistente, per questo è necessario utilizzare il comando renice
Per modificare la priorità di un processo esistente basta fare renice -n [valore di nice] -p [id processo]
renice -n 10 -p 1234 |
Popular Posts:
- None Found
An alternative to changing the nice value is to use a daemon called Trickle (http://nwlinux.co/f8). It is really great at prioritizing applications on a more permanent basis. For instance, a user can make SSH first priority on a given box. This configuration is especially useful in a situation where DDoS attacks are prevalent as SSH has priority over Apache – you can login to adjust settings and so on.
Thanks for the tip i’ll check it for sure.
The latest Fedora 15 ignores nice command. I`m not sure if this is Fedora`s fault or maybe the recent kernel has a problem. Anyway it is worth mentioning.
More here: http://forums.fedoraforum.org/showthread.php?t=266839
Thanks, that’s really interesting.
It’s tied to the cgroup new features ?
[…] ” “ Linuxaria: Be nice with your process on Linux […]