为什么我可以通过在 Linux 中以典型用户权限(ROOT 除外)使用 nice() 函数来降低进程的优先级?

为什么我可以通过在 Linux 中以典型用户权限(ROOT 除外)使用 nice() 函数来降低进程的优先级?

据我所知,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.正确吗?

答案1

Azad,您无法降低 nice 值;您只是选择不检查所做操作的结果。尝试应用负增量后,检查 r 的内容。它将为 -1,这意味着您的尝试失败了。

答案2

#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

相关内容