nice (Unix)

Da Wikipedia, l'enciclopedia libera.

nice è un comando dei sistemi operativi Unix e Unix-like, e più in generale dei sistemi POSIX[1], 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[2], e quindi la loro esecuzione procede più lentamente, favorendo gli altri processi. L'idea generale è che un utente si comporti in maniera cortese (la traduzione dalla lingua inglese del termine nice è appunto cortese, simpatico) nei confronti degli altri utenti quando avvia elaborazioni particolarmente lunghe ed intense, avviandole con un valore di nice elevato in modo da non rallentare eccessivamente l'esecuzione dei processi degli altri utenti.

nice è anche il nome di una chiamata di sistema definita dallo standard POSIX[3] che modifica il valore di nice del processo che la invoca. Di fatto il comando nice opera invocando l'omonima chiamata di sistema.

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.

Il comando nice[modifica | modifica sorgente]

Uso[modifica | modifica sorgente]

La sintassi generale di nice è la seguente:

nice [opzioni] [--] comando [arg1 [arg2 …] ]

Il parametro comando indica il comando da eseguire, ed i parametri facoltativi arg i suoi parametri.

Il doppio trattino -- (facoltativo) indica che i parametri successivi non sono da considerarsi opzioni.

Tra le opzioni significative vi sono:

-n delta
somma algebricamente il valore delta al valore di nice, in modo da aumentarlo o diminuirlo; delta può essere negativo, in modo da privilegiare il programma rispetto agli altri, ma in tal caso occorre disporre dei privilegi dell'amministratore (root).

Se l'opzione -n non è specificata, il comportamento predefinito prevede di aggiungere 10 al valore di nice (come se fosse stata specificata l'opzione -n 10).

Esempi[modifica | modifica sorgente]

Avvia parallelamente due copie del programma factor, ciascuna delle quali calcola i fattori primi del numero 4611686018427387903, misurando il tempo di esecuzione tramite il comando time: la prima copia viene eseguita con un valore di nice elevato (aumentato di 20 unità rispetto al normale), mentre la seconda usa il valore di nice predefinito. Entrambe le copie impiegano lo stesso tempo di CPU per effettuare il calcolo, ma la prima copia è svantaggiata e (su un sistema con una sola CPU) completa il suo calcolo ben dopo la seconda:

time nice -n 20 factor 4611686018427387903 &
time factor 4611686018427387903 &

La chiamata di sistema nice[modifica | modifica sorgente]

La chiamata di sistema nice è dichiarata nello header file signal.h:

#include <signal.h>
int nice(int incr);

Il parametro incr indica di quanto aumentare (o diminuire, in caso di valore negativo) il valore di nice del processo chiamante.

Valore di ritorno[modifica | modifica sorgente]

Se non vi sono errori, viene ritornato il precedente valore di nice e la variabile errno viene lasciata immutata.

Altrimenti, se vi sono errori, viene ritornato il valore -1 e la variabile errno viene modificata per indicare l'errore specifico.

Notare che -1 in alcuni sistemi è un valore di nice valido, per cui, per cui non è sufficiente controllare il risultato per stabilire se vi sono stati errori, ma occorre prima impostare la variabile errno a 0 e poi controllare se il suo valore è cambiato.

Errori[modifica | modifica sorgente]

In caso di errore la variabile errno può valere:

  • EPERM – Il parametro incr è negativo ed il chiamante non ha sufficienti privilegi per diminuire il valore di nice.

Note[modifica | modifica sorgente]

  1. ^ (EN) nice (utilities) in The Open Group Base Specifications Issue 6 IEEE Std 1003.1, 2004 Edition. URL consultato il 12-02-2009.
  2. ^ (EN) Nice Value in The Open Group Base Specifications Issue 6 IEEE Std 1003.1, 2004 Edition. URL consultato il 16-02-2009.
  3. ^ (EN) nice (functions) in The Open Group Base Specifications Issue 6 IEEE Std 1003.1, 2004 Edition. URL consultato il 12-02-2009.

Collegamenti esterni[modifica | modifica sorgente]

informatica Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica