Как я понимаю, каждый пользователь в 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 ответа2

1

Азад, ты НЕ можешь уменьшить приятную стоимость; Вы просто решили не проверять результат того, что вы делаете. Проверьте содержимое r после того, как вы попытаетесь применить отрицательное приращение. Это будет -1, что означает, что ваша попытка не удалась.

0
#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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .