我在我的服务器上使用 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 文档,该优先级非常低?
谢谢!
最佳答案
你把它搞反了。在现代 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");
关于CentOS服务器上的Perl设置优先级函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50144699/