【问题标题】:How to setpriority to a process in UNIX-like systems如何在类 UNIX 系统中设置进程的优先级
【发布时间】:2014-04-15 17:39:37
【问题描述】:
        int pri = getpriority(PRIO_PROCESS, 2134);
        printf("The original priority of 2134 is :%d", pri);

       //cpu_usage of the process in top is 80%, pri is 39 and NICE value is 19
        setpriority(PRIO_PROCESS, 20);

        int p = getpriority(PRIO_PROCESS, 2134);
        printf("priority is set to :%d", p);

在这里,我正在尝试为进程设置优先级(pid:2134)。在 top 命令中显示优先级为 39,nice 值为 19。因此进程的优先级非常低。但是该进程的 CPU 使用率高于 70。如果我将优先级设置为最小值,则该进程的 CPU 使用率应该会降低。我很困惑是否将优先级设置在 40..1 或 -19..20 的范围内。任何人都可以检查一下。任何帮助将非常感激。

【问题讨论】:

    标签: c unix


    【解决方案1】:

    进程优先级与其分配的 CPU 使用百分比不成比例。

    相反,它仅用作调度程序的标记,以确定要运行的两个进程中的哪一个现在可以运行。

    因此,一个高优先级的进程与高优先级的进程相抗衡几乎不会引起注意,而即使是空闲系统上的低优先级进程也可以一直运行。

    【讨论】:

    • 感谢您的回复重复数据删除器。让我们在一个无限循环中运行 5 个进程,我将进程 1 的优先级设置为最小值。考虑 1 个周期,调度器会在每个周期中调度进程还是会忽略优先级最低的进程?
    • @vijaykumarkdp:取决于调度程序。有一些普通的调度器从不运行低优先级的进程,也有一些普通的调度器尽量不让低优先级的进程完全饿死,尽管他们得到的时间要少得多。
    【解决方案2】:

    我发现这篇帖子 Change priority of the current process in C 展示了如何使用函数 setpriority 设置优先级。

    您必须使用带有 3 个参数的 setpriority

    但你需要是 root。

    有优先权的人:http://linux.die.net/man/2/setpriority

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-10
      • 1970-01-01
      • 1970-01-01
      • 2017-02-17
      • 1970-01-01
      • 1970-01-01
      • 2018-01-03
      • 1970-01-01
      相关资源
      最近更新 更多