2011-10-01 8 views
7

Estoy tratando de implementar un sabor diferente del 'bonito' comando de Unix en C. He visto las definiciones de nice() llamada al sistema y setpriority() llamada. La llamada nice() solo incrementa/disminuye la prioridad del proceso. Si quiero establecer la prioridad de un proceso en un valor particular, ¿no puedo usar la llamada nice()? Básicamente, aparte de cómo se modifica la prioridad, ¿hay alguna diferencia entre nice() y setpriority()?Diferencia entre nice y setpriority en Unix

Respuesta

8

Es histórico. nice() se introdujo mucho antes de setpriority(). Para compatibilidad con versiones anteriores, se mantuvo la función nice.

+0

Así que setpriority es un avance de nice ... gracias, tat despejó mi duda ... me preguntaba si la 'prioridad' referida por nice and setpriority era diferente (cojo, lo sé :)) luego implementaré nice con setpriority () sí mismo. –

+0

@AswinParthasarathy Es similar a la historia de dup2. En ambos casos, las personas se dieron cuenta de que se necesitaban comportamientos más generales (o más específicos), por lo que algunas funciones parecen tener un comportamiento superpuesto –

+0

@Aswin: en realidad hay otras prioridades, que se establecen a través de 'sched_setscheduler()'. – ninjalj

8

nice establece su propia prioridad (la amabilidad del proceso actual). setpriority le permite establecer la bondad de otros procesos (o grupos de procesos o usuarios). Piénselo como renice.

hombre 3p agradable

int agradable (int incr);

hombre 3p setpriority

int setpriority (int cuales, id_t que, int value);

+0

Sí, pero puedo lograr con setpriority, lo mismo que lo que logro con nice, ¿verdad? –

+1

Sí, pero nice * only * afecta el proceso actual, donde setpriority puede afectar (potencialmente) cualquier proceso. Esa es la diferencia. –

+0

@Chris la pregunta parece estar enfocada en por qué alguien usaría nice cuando setpriority/getpriority se puede usar para replicar el comportamiento –

2

nice() modifica el buen valor del proceso actual en relación con su buen valor actual, por lo que el proceso no necesita saber acerca de su buen valor inicial, solo le preocupa que sea más agradable para el sistema (por ejemplo: a proceso inicia a un niño que realiza un procesamiento en segundo plano, el niño se establece a sí mismo como bueno).

setpriority() caso de uso es el usuario que establece explícitamente valores agradables para procesos específicos.