以下のように、巨大なファイルを解析するためのフォークの概念を実装しましたが、正しくないようです。変数の一部がアクセスされていないコードに直面している問題はほとんどありません。
#ALL the variable in Complete CAPS are global variable
TLog("MSG",1,"Parent process $$");
TLog("MSG",4,"Creating child process for $$");
my $MAX_FORK = 2;
my $forkCount = 0;
my $processCounter = 0;
my @childId = ();
foreach my $fileNameFasta (@{$ref_array_file}) {
my $pid = fork();
if ( $pid ) {
TLog("MSG",1,"child process created : $pid");
push @childId,$pid;
$forkCount++;
}
elsif ( $pid == 0 ) {
my $outputFile = $STAT_FILE;
my $pidLocal = $childId[$processCounter]; #Use of unintialized variable
$outputFile =~s/\d{1,}\.txt$/$pidLocal\.txt/og; #hence naming of all ouput file are same
TLog("MSG",1,"For $pidLocal Creating output file for stat : $outputFile");
open my $outputfh,'>',$outputFile;
GenerateTupleCountFile($outputfh,$fileNameFasta);
close $outputfh;
TLog("MSG",5,"Calculation completed for $pidLocal");
TLog("MSG",5,"Plz check the $outputFile");
$processCounter++;
exit(0);
}
if ( $forkCount >= $MAX_FORK ) {
foreach (@childId) {
my $tmp = waitpid($_, 0);
TLog("MSG",5,"Process completed for with pid $tmp");
}
}
}
}
私が間違っている場合は、正しい方向を教えてください。