#!/usr/bin/perl use strict; use warnings; use diagnostics; use Parallel::ForkManager; my $config; $config->{max_prozesse} = 1000; $config->{poll_interval} = 1; my $forkmanager = Parallel::ForkManager->new($config->{max_prozesse}); $forkmanager->run_on_start( sub { my ($pid,$file) = @_; print "Sohn '$pid' startet mit Datei '$file'\n"; }, ); $forkmanager->run_on_finish( sub { my ($pid) = @_; print "Sohn '$pid' ist beendet\n"; }, ); $forkmanager->run_on_wait( sub { print "Warte auf Aufträge\n" }, $config->{poll_interval}, ); my $lauf = 1; while ($lauf) { if (opendir my $vh,'.') { foreach my $file ( grep { $_ =~ /^[a-z0-9]+\-auftrag.dat$/ && !-z $_ } readdir $vh ) { print "Datei $file gefunden\n"; rename($file,"$file-erl"); my $pid = $forkmanager->start($file) and next; # Sohn print "Hier meldet sich Sohn '$pid' von der Front\n"; $forkmanager->finish(); } } } $forkmanager->wait_all_children;