J'ai 24 tâches (commandes Unix) dans la liste (fichier). ils doivent être exécutés par 5 à l'heure donnée. Quand une tâche se termine, le script doit en exécuter un suivant jusqu'à ce que les 24 tâches soient exécutées/en compétition. En attendant au premier plan j'ai une boucle while avec la commande "ps" pour surveiller l'activité. Des idées?perl: Exécution des processus Unix et contrôle de ceux-ci à l'aide de Perl
-1
A
Répondre
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
Vous pouvez obtenir des informations à partir de votre suivi de processus avec Proc::ProcessTable
Voici un exemple:
#!/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";
}
}
Si vous êtes sous Windows, vous pouvez peut-être utiliser Win32 :: Process * modules . Mais je n'ai jamais utilisé!
La fonctionnalité que vous recherchez est la limitation des processus. Découvrez un module comme ['Parallel :: ForkManager'] (http://metacpan.org/pod/Parallel::ForkManager) ou [' Forks :: Super'] (http://metacpan.org/pod/Forks ::Super). – mob
GNU Parallel est un programme Perl qui fait exactement ce que vous voulez. – amon