perl:运行unix进程并使用perl监视它们
问题描述:
我在列表(文件)中有24个任务(unix命令)。他们需要在特定时间执行5次。当任务完成时,脚本应该执行下一个任务,直到所有24个任务被执行/竞争。同时在前台,我用“ps”命令来监视活动。有任何想法吗?perl:运行unix进程并使用perl监视它们
答
use Parallel::ForkManager qw();
my $pm = Parallel::ForkManager->new(5);
for my $task (@tasks) {
$pm->start() and next;
my $exit_code = 0;
if (!eval {
...
return 1; # No exception
}) {
$exit_code = $! || $? >> 8 || 255;
warn([email protected]);
}
$pm->finish($exit_code);
}
$pm->wait_all_children();
答
你可以从你的过程监控获取信息与Proc::ProcessTable
这是一个例子:如果you're使用Windows
#!/usr/bin/perl
use Proc::ProcessTable;
$ref = new Proc::ProcessTable;
foreach $proc (@{$ref->table}) {
if(@ARGV) {
next unless grep {$_ == $proc->{pid}} @ARGV;
}
print "--------------------------------\n";
foreach $field ($ref->fields){
print $field, ": ", $proc->{$field}, "\n";
}
}
,也许你可以使用的Win32 ::进程*模块。但我从来没有用过!
您正在查找的功能是进程限制。查看模块,如[Parallel :: ForkManager'](http://metacpan.org/pod/Parallel:ForkManager)或['Forks :: Super'](http://metacpan.org/pod/Forks ::超)。 – mob
GNU并行是一个Perl程序,它恰好可以完成你想要的任务。 – amon