我创建了一个进程,在里面我试图减少它的值:
#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。
发布于 2020-08-05 15:54:19
你得到的是0而不是-20,因为nice()将传递的值添加到调用线程的nice值中,所以如果你当前的nice值是19,你使用nice(-19) 19 - 19 =0来代替,如果你使用nice(-19)(-39),你会得到一个-20的值,但如果要设置更低的nice值,你需要超级用户特权,相反,对于第一个问题,你从你对nice值的调用中得到-1,因为在发生错误的情况下(如无特权的进程试图设置更低的nice值),它返回-1,当然,当你试图设置-1 nices值时,它也可以返回-1。因此,要区分这两种情况,请测试errno变量
https://stackoverflow.com/questions/63244319
复制相似问题