CentOS服务器上的Perl设置优先级函数

标签 perl centos set cpanel

我在我的服务器上使用 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/

相关文章:

perl - 如何生成具有不同基数的字符序列,例如十六进制?

php - Windows GUI EXE 的最佳脚本语言

添加 SSL 证书后 Apache 无法启动

windows - 如何从我的 Perl 程序中设置 cmd.exe 窗口的大小?

regex - 无法通过子例程通过正则表达式替换字符串

linux - Centos 上的 MSBuild 返回 "The imported project "/Microsoft.Cpp.Default.props“未找到”

apache-kafka - Kafka 代理节点宕机并出现 "Too many open files"错误

Python:将集合列表转换为集合

python - pprint 排序字典而不是集合?

java - 将 Set<String> 值添加到新的 Set<String> 集合