我创建了一个过程,并在内部尝试降低其美观的值(value):

#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的合适值?
如果我尝试增加美观的值,该程序将正常运行。

编辑:对上述代码感到抱歉;如果我使用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。

最佳答案

您得到0而不是-20,因为nice()将传递给调用线程的nice值的值相加,因此,如果您当前的nice值为19,而您使用nice(-19) 19-19 = 0则如果您使用nice(-39)一个很好的值-20,但是对于设置更低的nice值来说当然是错误的,您需要 super 用户权限,而对于第一个问题,您从调用nice会得到-1,因为在发生错误的情况下(例如非特权进程,请尝试设置一个更低的nice值) ),则返回-1,当您尝试设置-1 nice值时,它当然也可以返回-1,因此要区分这两种情况,请测试errno变量

关于c - 降低流程的值(value),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63244319/

10-10 05:38