我在服务器上使用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文档,它是非常低的?
谢谢!
答案 0 :(得分:2)
你倒退了。在现代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");