首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl中具有修改调度优先级的Runnig OS函数

Perl中具有修改调度优先级的Runnig OS函数
EN

Stack Overflow用户
提问于 2011-12-19 15:16:52
回答 2查看 445关注 0票数 4

Perl是否有可能在没有外部命令的情况下运行具有修改的调度和/或IO调度优先级的Linux OS函数?我试图模拟以下内容:

代码语言:javascript
复制
nice -n19 ionice -c2 -n7 cp largefile largefile2

我可以用File::Copy、set优先级函数和CPAN模块Linux::IO_Prio来实现这一点吗?我是否只需要降低0美元的调度优先级?

编辑:如果我这样做,复制()的优先级和IO会降低吗?有更好的方法吗?

代码语言:javascript
复制
use Linux::IO_Prio qw(:all);
use File::Copy;

setpriority(0, 0, -20);
ionice(IOPRIO_WHO_PROCESS, $$, IOPRIO_CLASS_IDLE, 7);

copy("file1","file2") or die "Copy failed: $!";
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-19 17:08:45

精炼Oesor’s answer

代码语言:javascript
复制
use BSD::Resource qw(PRIO_PROCESS setpriority);
use Linux::IO_Prio qw(IOPRIO_WHO_PROCESS IOPRIO_PRIO_VALUE IOPRIO_CLASS_BE ioprio_set);
BEGIN { require autodie::hints; autodie::hints->set_hints_for(\&ioprio_set, { fail => sub { $_[0] == -1 } } ) };
use autodie qw(:all setpriority ioprio_set);

setpriority(
    PRIO_PROCESS,       # 1
    $$,
    19
);
ioprio_set(
    IOPRIO_WHO_PROCESS,                         # 1
    $$,
    IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, 7)       # 0x4007
);

顺便说一句,您可以通过strace找到库调用和类似的内容。

票数 1
EN

Stack Overflow用户

发布于 2011-12-19 15:55:44

您最好根据需要更改当前运行的pid的优先级。当然不是便携的,但是这样做本身是不可移植的。执行这类操作的任何操作都将归结为发出外部命令所做的相同的库调用。

代码语言:javascript
复制
my $pid = $$;
`ionice -c2 -p$pid`;
`renice +19 $pid`;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8563377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档