我创建了一个过程,并在内部尝试降低其美观的值(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/