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

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

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

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

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

谢谢!

最佳答案

你有倒退。在现代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");

07-26 03:49