首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >减少进程的nice值

减少进程的nice值
EN

Stack Overflow用户
提问于 2020-08-04 17:51:32
回答 1查看 96关注 0票数 3

我创建了一个进程,在里面我试图减少它的值:

代码语言:javascript
复制
#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:

代码语言:javascript
复制
#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。

EN

回答 1

Stack Overflow用户

发布于 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变量

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63244319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档