Почему я могу уменьшить приоритет процесса, используя функцию nice() с обычным пользовательским разрешением (кроме ROOT) в linux?

Как я понимаю, каждый пользователь в linux может изменить приоритет каждого процесса с помощью команд nice и renice. Также я знаю, что все пользователи просто могут увеличить приоритет процессов, и единственный пользователь, который может уменьшить этот приоритет, это ROOT. Когда я проверял это в терминальной среде с помощью этих команд, все было в порядке. Это означает, что когда я хочу уменьшить приоритет процесса, система выдает текстовое сообщение "Отказано в доступе". Как я знаю тоже по умолчанию все процессы запускаются с приоритетом 0. Так что, когда я хочу установить приоритет процесса с помощью отрицательного числа, система должна выдать текст ошибки. Когда я запускаю эту программу на языке C:

#include<stdio.h>
#include<unistd.h>
void main()
{
int n=10,r;
r=nice(n);
while(1)
    printf("Test);
}

Я ожидал, что система показывает ошибку, но программа работает без проблем! Хотя программа запускается с типичного разрешения пользователя. Я хочу знать, почему, когда я хочу уменьшить приоритет процесса с помощью команды renice в соответствии с тем, что ожидалось, система показывает ошибку, но когда я хочу уменьшить приоритет процесса с помощью nice() функция программы не выдает никаких ошибок? Это предложение All users just can increase the priority of process and the only user that can decrease this priority is ROOT. правильный?

2 ответа

Решение

Azad, you're NOT able to reduce the nice-value; you simply chose not to check the result of what you're doing. Check the content of r after you try to apply a negative increment. It will be -1, which means your attempt failed.

#include<stdio.h>
#include<unistd.h>
#include<sys/resource.h>
void main()
{
    int n=10;
    (void)setpriority(PRIO_PROCESS, 0, n);
    sleep(60);
    while(1)
        printf("Test");
}

После установки приоритета процесса на требуемом уровне, задержка на 1 мин, чтобы мы могли проверить измененный приоритет в команде top / ps. Проверьте эту ссылку, http://linux.die.net/man/2/setpriority

Другие вопросы по тегам