是否可以让Perl在没有外部命令的情况下运行具有修改的调度和/或IO调度优先级的
Linux OS功能?我试图模拟以下内容:
nice -n19 ionice -c2 -n7 cp largefile largefile2
我可以用File :: Copy,setpriority函数和CPAN模块Linux :: IO_Prio以某种方式做到这一点吗?我只需要降低0美元的调度优先级吗?
编辑:
如果我执行以下操作,将降低copy()的优先级和IO吗?有一个更好的方法吗?
use Linux::IO_Prio qw(:all); use File::Copy; setpriority(0,-20); ionice(IOPRIO_WHO_PROCESS,$$,IOPRIO_CLASS_IDLE,7); copy("file1","file2") or die "Copy failed: $!";
解决方法
精炼
Oesor’s answer:
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,IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE,7) # 0x4007 );
顺便说一句,你可以找到库调用和类似的东西与strace.