Уменьшение хорошей ценности процесса - PullRequest
3 голосов
/ 04 августа 2020

Я создал процесс и внутри попытался уменьшить его значение nice:

#include    <stdlib.h>
#include    <stdio.h>
#include    <sys/time.h>
#include    <sys/resource.h>
#include    <unistd.h>

int main()
{
    printf("Modified nice value: \t %d\n", nice(-19));   // Output: -1; if I run with sudo the output is 0
    return 0;
}

Почему вывод -1 или 0, если я использую sudo? Как я могу установить значение nice равным -19?

Если я попытаюсь увеличить значение nice, программа будет работать правильно.

РЕДАКТИРОВАТЬ: извините за приведенный выше код; вывод 0 происходит, если я запускаю следующий код с помощью sudo:

#include    <stdlib.h>
#include    <stdio.h>
#include    <sys/time.h>
#include    <sys/resource.h>
#include    <unistd.h>

int main()
{
int nice_value;

nice_value = getpriority(PRIO_PROCESS, 0);
printf("Default nice value: \t %d\n", nice_value);          // 0

nice_value = nice(12);
printf("Modified nice value: \t %d\n", nice_value);         // 12 OK

printf("Modified nice value: \t %d\n", nice(20));           // 19

printf("Modified nice value: \t %d\n", nice(-19));          // 0 (sudo)
return 0;
}

Вместо этого, если я запускаю приведенный выше код (до редактирования) с помощью sudo, вывод будет -19. Почему в последнем случае ("вариант редактирования") вывод равен 0?

Если я прокомментирую первые три printf, вывод будет -19.

1 Ответ

0 голосов
/ 05 августа 2020

вы получите 0 вместо -20, потому что nice() добавляет значение, переданное к значению nice для вызывающего потока, поэтому, если ваше текущее значение nice равно 19 и вы используете nice(-19) 19-19 = 0 вместо этого, если вы используете nice (-39) у вас есть хорошее значение -20, но, конечно, для установки более низкого значения nice вам нужны привилегии суперпользователя, вместо этого для первого вопроса вы получите -1 от вашего вызова nice, потому что в случае ошибки (например, непривилегированный процесс попробуйте установить более низкое значение nice), он возвращает -1, конечно, он может вернуть -1 также, когда вы пытаетесь установить значение nice -1, поэтому, чтобы различать эти два случая, проверьте переменную errno

...