-1
我在列表(文件)中有24個任務(unix命令)。他們需要在特定時間執行5次。當任務完成時,腳本應該執行下一個任務,直到所有24個任務被執行/競爭。同時在前臺,我用「ps」命令來監視活動。有任何想法嗎?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