#!/usr/bin/perl use strict; use warnings; use File::Spec; my $gsc = 'C:\Program Files\gs\gs9.05\bin\gswin64c.exe'; my $dpi = '150'; my $txt = '4'; my $bld = '4'; my $ein='C:\Lokale Daten\vbv tiffs\Work\Spool\\'; my $aus='C:\Lokale Daten\vbv tiffs\Work\Tiff\\'; # 10 Prozesse gleichzeitig starten my $max_run=10; my @cmd=($gsc,'-q', '-dSAFER', '-dNOPAUSE', '-dBATCH', '-sDEVICE=tiffg4', '-r'.$dpi, '-dTextAlphaBits='.$txt, '-dGraphicsAlphaBits='.$bld); # PID aller laufenden Kindprozesse my %running; # Kommandos die auf Ausfühung warten. my @waiting; # bendete Kindprozesse terminieren $SIG{CHLD}=sub{ my $pid=wait(); delete($running{$pid}); }; die("Error open $ein ($!)\n") unless (opendir(my $dh,$ein)); while (my $Eintrag = readdir($dh)) { next if($Eintrag eq "." or $Eintrag eq ".." or -d $Eintrag); if($Eintrag =~ /\.ps$/) { my $outfile = File::Spec->join($aus,$Eintrag.'.tif'); my $infile = File::Spec->join($ein,$Eintrag); my @c=@cmd; push(@c,'-sOutputFile="'.$outfile.'"'); push(@c,'-f "'.$infile.'"'); push(@waiting,\@c); } Start(\%running,\@waiting,$max_run); } closedir($dh); while(@waiting || %running) { Start(\%running,\@waiting,$max_run); select(undef,undef,undef,0.10); } ######################################################################## ######################################################################## sub Start { my $run=shift; my $wait=shift; my $max=shift; while(keys(%$run) < $max) { return unless(@$wait); my $cmd=shift(@$wait); my $pid=fork(); die("Fork Failed $!\n") unless(defined($pid)); unless($pid) { exec(@$cmd); die("EXEC Failed"); } $run->{$pid}=1; } }