Comando nice in Linux: avviare un processo con priorità CPU diversa

nice avvia un nuovo comando modificandone il valore nice, che influisce sulla priorità relativa di pianificazione della CPU. Con GNU nice, -n 10 aggiunge 10 al valore ereditato: normalmente rende il comando meno favorito quando compete per la CPU, senza imporre un limite percentuale di utilizzo.

Su Linux il valore va normalmente da -20, più favorevole, a 19, meno favorevole. Un valore più basso indica una priorità maggiore. Per cambiare un’attività già avviata si usa invece renice, descritto nella guida in inglese; nice riguarda l’avvio di un nuovo comando.

Sintassi di base

nice -n valore_di_regolazione comando [argomenti...]

La guida usa GNU nice. Consulta man nice e nice --help nella versione installata; type nice aiuta a capire se la shell usa un proprio comando o l’eseguibile esterno. L’opzione -n specifica una variazione relativa, non necessariamente il valore finale.

Per esempio, partendo da 0, una variazione di +10 produce 10; partendo da 5, produce normalmente 15. Il risultato resta soggetto all’intervallo e ai permessi del sistema. Avviare una shell da un’attività già regolata può quindi cambiare il valore iniziale dei comandi successivi.

Esempi pratici

Avviare un calcolo con priorità relativa inferiore

Usa un file di prova leggibile chiamato large.log nella cartella corrente, oppure sostituisci il nome con il percorso corretto. Il comando legge il file e calcola la sua impronta SHA-256, un riepilogo crittografico del contenuto; non lo modifica. Il valore nice del nuovo comando aumenta di 10 rispetto a quello ereditato.

nice -n 10 sha256sum large.log

L’output contiene l’impronta e il nome del file. Se il file non cambia, il risultato deve coincidere con quello ottenuto calcolandone normalmente la stessa impronta. Un file piccolo può essere elaborato troppo rapidamente per osservare il processo con ps; non usare questo esempio come misura di una differenza di prestazioni.

Usare l’incremento predefinito

In GNU nice, quando è presente un comando ma manca una regolazione esplicita, l’incremento predefinito è +10.

nice sha256sum large.log

Controllare il valore effettivo

Su Linux con ps di procps-ng, sostituisci 1234 con il PID effettivo del tuo comando ancora attivo. La colonna NI mostra il valore nice; verifica anche comando e PID per non osservare un processo diverso.

ps -p 1234 -o pid,ni,cmd

Verificare un nuovo processo di prova

Uno sleep di 60 secondi lascia più tempo per il controllo. La sequenza seguente lo avvia in background con una variazione di +10 e interroga il PID dell’ultimo comando asincrono, disponibile in Bash tramite $!.

nice -n 10 sleep 60 &
ps -o ni,comm -p $!

Se il valore iniziale era 0 e l’avvio è riuscito, un possibile risultato è:

 NI COMMAND
 10 sleep

Se la shell partiva da un valore diverso, non aspettarti sempre 10. Esegui nice senza comando per leggere il valore corrente e considera l’incremento richiesto. Nei primissimi istanti potresti osservare ancora la fase di avvio: conserva il PID e ripeti il controllo mentre il tuo sleep è attivo. Un altro comando avviato in background cambia il significato di $!.

Sleep attende e non crea una contesa significativa della CPU: serve a verificare il valore, non un rallentamento o una percentuale di consumo. Lascia terminare la prova; quando il processo è già finito, ps non può mostrarne una riga attiva.

Opzioni e forme principali

Forma Comportamento in GNU nice
-n valore Aggiunge la variazione al valore nice ereditato dal nuovo comando.
--adjustment=valore Forma lunga della stessa opzione.
Senza argomenti Mostra il valore nice corrente, senza avviare un comando.

La consultazione senza argomenti non regola la shell chiamante. Anche l’avvio di un comando con nice non cambia il valore della shell da cui lo esegui: la variazione riguarda il nuovo comando e viene normalmente ereditata dai suoi discendenti.

Permessi e limiti della regolazione

Diminuire il valore nice per aumentare la priorità richiede autorizzazioni adeguate. Su Linux entrano in gioco privilegi come CAP_SYS_NICE e il limite RLIMIT_NICE, secondo le condizioni descritte nel manuale getpriority/setpriority. Non presumere che un utente ordinario possa sempre ripristinare un valore precedente più basso.

Nice non garantisce un tempo di completamento, non assegna una quota fissa della CPU e non imposta direttamente limiti di memoria o di I/O. Il risultato dipende dalla contesa e dalle regole di pianificazione, inclusi gruppi di attività e politiche del sistema. Il valore nice non equivale alla priorità delle politiche in tempo reale.

Se l’avvio segnala un errore, leggi il messaggio e verifica comando e valore effettivi prima di trarre conclusioni. In GNU nice il risultato restituito normalmente è quello del comando eseguito; esistono inoltre codici specifici per errori di nice o nell’avvio del comando. Un’impronta corretta non dimostra, da sola, che il sistema abbia applicato l’effetto di pianificazione che ti aspettavi.

Nella verifica disponibile, GNU coreutils 8.32 in Git Bash su Windows ha riportato 0 come valore iniziale, 10 con l’incremento esplicito e predefinito, e 8 con due incrementi successivi di 5 e 3. I due esempi sha256sum hanno prodotto la stessa impronta su un file di prova invariato. Il ps locale non supporta -o: non sono stati verificati la colonna NI su Linux né gli effetti sulle prestazioni o sui permessi Linux.

Domande frequenti

Nice -n 10 rende il comando dieci volte più veloce?

No. Aggiunge 10 al valore nice ereditato e normalmente riduce la priorità relativa della CPU. Il numero non esprime un fattore di velocità né un limite al consumo; con poca contesa potresti non osservare una differenza evidente.

Documentazione di riferimento

Il manuale nice(1) del progetto GNU coreutils documenta incremento predefinito, opzioni e codici di uscita. Confrontalo con la documentazione installata, soprattutto se la shell o il sistema fornisce un’altra implementazione.