【问题标题】:Decreasing nice value of a process降低流程的价值
【发布时间】: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


【解决方案1】:

你得到 0 而不是 -20,因为 nice() 将传递的值添加到调用线程的 nice 值,所以如果你当前的 nice 值是 19 并且你使用 nice(-19) 19 - 19 = 0 而不是你使用nice(-39) 你得到了一个不错的值 -20 但当然设置较低的 nice 值你需要超级用户权限,而不是第一个问题你从调用 nice 得到 -1 因为在发生错误的情况下(比如非特权进程尝试设置较低的 nice 值),它返回 -1,当然当您尝试设置 -1 nice 值时它也可以返回 -1,因此要区分这两种情况,请测试 errno 变量

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 2014-02-08
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2016-03-17
    • 2021-07-17
    相关资源
    最近更新 更多