2017-08-30 80 views
-1

我在列表(文件)中有24个任务(unix命令)。他们需要在特定时间执行5次。当任务完成时,脚本应该执行下一个任务,直到所有24个任务被执行/竞争。同时在前台,我用“ps”命令来监视活动。有任何想法吗?perl:运行unix进程并使用perl监视它们

+1

您正在查找的功能是进程限制。查看模块,如[Parallel :: ForkManager'](http://metacpan.org/pod/Parallel:ForkManager)或['Forks :: Super'](http://metacpan.org/pod/Forks ::超)。 – mob

+2

GNU并行是一个Perl程序,它恰好可以完成你想要的任务。 – amon

回答

3
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(); 
0

你可以从你的过程监控获取信息与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 ::进程*模块。但我从来没有用过!