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

1073

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

0
Может быть, вы имеете в виду «увеличить милость»? Милость процесса - это противоположность концепции приоритета. Все процессы могут уменьшить использование своего процессора (== повысить его привлекательность, == уменьшить приоритет), но только корневые процессы могут потреблять больше, чем раньше. Dmytro Sirenko 11 лет назад 0
да, именно мой вопрос о приятности. Вы пишете: «Все процессы могут уменьшить использование своих процессоров, но только корневые процессы могут потреблять больше, чем раньше». Вы можете объяснить это, пожалуйста? Я не мог понять это правильно. 11 лет назад 0
Это решение безопасности: сделать отказ в обслуживании невозможно, я думаю. Пользователям действительно необходимо повысить приоритет процессов, но некоторые злоумышленники могут использовать это для отключения системы, поэтому это разрешено делать только корневому пользователю (действительно доверенному пользователю). Dmytro Sirenko 11 лет назад 0
да, но почему, когда я использую функцию `nice ()` в своей программе, я могу уменьшить приоритет процесса (хотя у меня есть обычный пользователь!)? 11 лет назад 0

2 ответа на вопрос

1
tink

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.

0
Sunil Bojanapally
#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"); } 

After setting the process priority to required level, delay by 1 mins so that we can check altered priority in top/ps command. Check this link, http://linux.die.net/man/2/setpriority

Похожие вопросы