3

我创建了一个流程,并在内部尝试降低其不错的价值:

#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;
}

如果我使用 sudo,为什么输出是 -1 或 0?如何设置一个等于 -19 的好值?

如果我尝试增加 nice 值,则程序可以正常工作。


编辑:对不起上面的代码;如果我使用 sudo 运行以下代码,则会出现输出 0:

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

4

1 回答 1

-1

你得到 0 而不是 -20 因为nice()将传递的值添加到调用线程的 nice 值,所以如果你当前的 nice 值是 19 并且你使用nice(-19)19 - 19 = 0 而不是如果你使用 nice(-39) 你得到了一个 nice值 -20 但当然要设置较低的 nice 值,您需要超级用户权限,而不是第一个问题,您从调用 nice 得到 -1,因为在发生错误的情况下(如非特权进程尝试设置较低的 nice 值),它返回-1,当然,当您尝试设置-1 nice值时它也可以返回-1,因此要区分这两种情况,请测试errno变量

于 2020-08-05T07:54:19.353 回答