【问题标题】:Perl setpriority function on CentOS serverCentOS 服务器上的 Perl setpriority 函数
【发布时间】:2018-10-13 03:46:13
【问题描述】:

我在我的服务器上使用 CentOS 7 和 cPanel。我试图弄清楚如何将 Perl 任务的优先级设置为低优先级。

当我调用 setpriority(PRIO_PROCESS, $$, 19) 时,任务显示在 cPanel 的任务管理器 (TOP) 列表中,优先级为 19。但 cPanel 文档说任务管理器显示的值从 -20 到 20,其中-20 是该任务的最低 CPU 利用率。所以我尝试调用 setpriority(PRIO_PROCESS, $$, -19) 但任务在 cPanel 任务管理器中显示为优先级 0。

所以我尝试在 setpriority 之后立即调用 getpriority(PRIO_PROCESS, $$)。如果我使用任何负值的优先级值调用 setpriority,getpriority 将为当前进程返回 0。如果我用任何正值调用 setpriority,getpriority 会返回我刚刚指定的值。

似乎任务管理器显示了我在 setpriority 中使用的相同正值,但忽略了我在 setpriority 中发送的任何负值。

是否可以告诉 CentOS 将当前进程的优先级设置得很低;也就是说,它以类似于-19 的优先级显示在任务管理器中,根据cPanel 文档,这是非常低的?

谢谢!

【问题讨论】:

    标签: perl centos set cpanel


    【解决方案1】:

    你有它倒退。在现代 Linux 系统上,范围是 -20 到 19,其中 -20 是最高优先级,19 是最低。 (在其他一些系统上它可以达到 20。)

    当您提供负数时,您不小心尝试增加优先级,但缺少权限(幸运的是)阻止您这样做,这就是为什么优先级保持在默认值 0。您应该做的第一件事正在检查错误!

    use constant PRIO_PROCESS => 0;
    
    # $userland_priority ranges from -20 (highest) to 19 (lowest).
    my $userland_priority = 19;
    
    setpriority(PRIO_PROCESS, $$, $userland_priority)
       or die("setpriority: $!\n");
    

    【讨论】:

    • 谢谢。我将联系 cPanel 要求进一步澄清他们的流程管理器。就像我说的,当我调用值为 19 的 setpriority 时(我认为基于 setpriority 的 Perl 文档是最低的,它在 Process Manager 中显示为 19,其文档说:“优先级:-20 和 20 之间的数字它描述了系统用于处理进程的时间。-20 是 CPU 密集度最低的,而 20 是 CPU 密集度最高的。”这似乎与 setpriority 值范围相反。
    • cPanel 正在返回您设置的优先级,因此只是文档不正确。使用我提供的代码设置最低优先级(最少 CPU)。
    猜你喜欢
    • 2019-01-03
    • 1970-01-01
    • 2014-12-22
    • 2016-12-09
    • 2012-07-21
    • 2019-02-09
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多