【发布时间】:2020-11-24 09:33:55
【问题描述】:
我创建了一个进程,在里面我试图降低它的好值:
#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。
【问题讨论】:
-
来自手册页:传统上,只有特权进程才能降低 nice 值(即设置更高的优先级)。
-
为什么不单独调用
nice,如果返回-1检查errno是否有错误? -
添加@Someprogrammerdude,如果你得到
EPERM,那么你没有权限通过降低nice来增加优先级。 -
你好@Someprogrammerdude cpuld你看看编辑好吗?
标签: c linux operating-system nice