Разница между nice и setpriority в unix

Я пытаюсь реализовать другой вариант «хорошей» команды unix в C. Я видел определения системного вызова nice() и вызова setpriority(). Вызов nice() только увеличивает/уменьшает приоритет процесса. Если я хочу установить приоритет процесса на определенное значение, могу ли я использовать вызов nice()? По сути, помимо того, как изменяется приоритет, есть ли какая-либо разница между nice() и setpriority()?


person Aswin Parthasarathy    schedule 01.10.2011    source источник


Ответы (3)


Это исторично. nice() был введен задолго до setpriority(). Для обратной совместимости функция nice была сохранена.

person Foo Bah    schedule 01.10.2011
comment
так что setpriority - это продвижение nice.. спасибо, это развеяло мои сомнения.. мне было интересно, был ли «приоритет», на который ссылаются nice, и setpriority другим (хромым, я знаю :)), тогда я реализую nice с помощью setpriority() сам. - person Aswin Parthasarathy; 01.10.2011
comment
@AswinParthasarathy Это похоже на историю dup2. В обоих случаях люди поняли, что необходимо более общее (или более конкретное) поведение, поэтому некоторые функции, похоже, имеют перекрывающееся поведение. - person Foo Bah; 01.10.2011
comment
@Aswin: на самом деле есть и другие приоритеты, которые устанавливаются через sched_setscheduler(). - person ninjalj; 01.10.2011

nice устанавливает ваш собственный приоритет (приятность текущего процесса). setpriority позволяет установить качество других процессов (или групп процессов, или пользователей). Думайте об этом как renice.

парень 3p хорошо

целое красиво (целое увеличение);

man 3p установить приоритет

int setpriority(int which, id_t who, int value);

person Chris Eberle    schedule 01.10.2011
comment
да, но я могу сделать с setpriority то же самое, что и с nice, верно? - person Aswin Parthasarathy; 01.10.2011
comment
Да, но nice влияет только на текущий процесс, тогда как setpriority может влиять (потенциально) на любой процесс. В этом разница. - person Chris Eberle; 01.10.2011
comment
@Chris вопрос, кажется, сосредоточен на том, почему кто-то может использовать nice, когда setpriority / getpriority можно использовать для воспроизведения поведения - person Foo Bah; 01.10.2011
comment
Название говорит само за себя - потому что оно красивое :D А если серьезно, то оно просто для удобства. - person Chris Eberle; 01.10.2011

nice() изменяет значение nice текущего процесса относительно его текущего значения nice, поэтому процессу не нужно знать о своем начальном значении nice, его заботит только то, что он должен быть более приятным для системы (например, процесс запускает дочерний процесс). кто занимается какой-то фоновой обработкой, ребенок настраивает себя как хороший).

setpriority() вариант использования — пользователь явно устанавливает абсолютные значения nice для определенных процессов.

person ninjalj    schedule 01.10.2011