2017-08-30 53 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 ::進程*模塊。但我從來沒有用過!