Danke für den Hinweis leider resultiert meiner meinung nach ja das Problem daraus das ich threads nutze und in diesen rufe ich per system() andere Skripte (mit variabler Anzahl) auf.zur zeit sieht das ganze ungefähr so aus
my $max_parallel_jobs = 7; # Maximale Anzahl paralleler Jobs
my $total_jobs = 0; # Anzahl auszufuehrender Jobs
my $sem = Thread::Semaphore->new($max_parallel_jobs);
my @threads;....
sub startThreads{
my @skripte;
@skripte = ( ['Skriptname1', 'Pfad zum Skript1'], ['Skriptname2', 'Pfad zum Skript2'], ..... );
$total_jobs = $#skripte;
while($#skripte >= 0){
(my $name, my $pfad) = @{shift(@skripte)};
$sem->down();
$threads[$#skripte + 1] = threads->create("exec_skript", $name, $pfad, $sem);
}
foreach my $thread (@threads) {
(my $name,my $pfad, my $err_code, my $err_msg) = eval{@{$thread->join}};
my $msg;
if ($err_code != 0) {
$msg = "$err_msg => $err_code";
$err_cnt++;
} else {
$msg = "Skript erfolgreich ausgefuehrt => $err_code";
}
DEBUG > 0 and print "\n=====================================\n";
DEBUG > 0 and print "Skript ausgefuehrt mit der TID ". $thread->tid() .": $name \n\t Pfad: $pfad \n\t Ausgefuehrt: $msg\n";
DEBUG > 0 and print "=====================================\n\n";
}
print Dumper(threads->list());
}
sub exec_skript{
my $name = shift;
my $pfad = shift;
my $sem = shift;
DEBUG > 1 and print "Gestartet: \tName: $name\t Pfad: $pfad\n";
system($pfad);
my @ret_vals = ($name, $pfad, $?, $!);
DEBUG > 1 and print "Beendet: \tName: $name\t Pfad: $pfad\t Rueckgabewert: $! => $?\n";
$sem->up();
return \@ret_vals;
}
Datum: 25.01.2007-16:07
