2011-10-01 13 views
7

Sto cercando di implementare un diverso sapore del comando 'nice' di unix in C. Ho visto le definizioni di chiamata a sistema piacevole() call e setpriority(). La chiamata nice() incrementa/decrementa solo la priorità del processo. Se voglio impostare la priorità di un processo su un valore particolare, non posso usare la chiamata nice()? Fondamentalmente, a parte il modo in cui la priorità viene modificata, c'è qualche differenza tra nice() e setpriority()?Differenza tra nice e setpriority in unix

risposta

8

È storico. nice() è stato introdotto molto prima dello setpriority(). Per compatibilità con le versioni precedenti, è stata mantenuta la funzione nice.

+0

così setpriority è un progresso di bello .. grazie, tat cancellato il mio dubbio .. Mi chiedevo se la 'priorità' sollevata dal bello e setpriority era diverso (zoppo, lo so :)) poi mi attuare bello con setpriority () stesso. –

+0

@AswinParthasarathy È simile alla cronologia di dup2. In entrambi i casi, la gente ha capito che erano necessari comportamenti più generali (o più specifici), che è il motivo per cui alcune funzioni sembrano avere un comportamento sovrapposizione –

+0

@Aswin: in realtà ci sono altre priorità, che sono impostati tramite 'sched_setscheduler()'. – ninjalj

8

nice imposta la propria priorità (la gradevolezza del processo corrente). setpriority consente di impostare la gradevolezza di altri processi (o gruppi di processi o utenti). Pensalo come renice.

uomo 3p bello

int bello (int incr);

uomo 3p setpriority

int setpriority (int che, id_t che, int value);

+0

sì ma posso realizzare con setpriority, lo stesso di quello che fare con bello, giusto? –

+1

Sì, ma nice * only * influenza il processo corrente, in cui setpriority può influenzare (potenzialmente) qualsiasi processo. Questa è la differenza. –

+0

@Chris la domanda sembra essere incentrata sul motivo per cui qualcuno dovrebbe usare bene quando setpriority/getpriority può essere utilizzato per replicare il comportamento –

2

nice() modifica il valore piacevole del processo corrente rispetto al suo valore attuale, quindi il processo non ha bisogno di sapere del suo valore di partenza, si preoccupa solo che sia più bello per il sistema (es: processo avvia un bambino che fa qualche elaborazione in background, il bambino si impone di essere bello).

setpriority() use case è l'utente che imposta esplicitamente valori validi per processi specifici.