У меня есть некоторый Perl-код, который генерирует несколько дочерних процессов. Основной код выглядит следующим образом:
my $forked = 0;
my $err = 0;
my $Processes_To_Use_After_Calc=10;
print "Parent ($$) has started\n";
for my $ispawn (1 .. $Processes_To_Use_After_Calc){
my $child_pid = fork();
die "Cannot fork: $!" if !defined $child_pid; # system overload
if(defined $child_pid && $child_pid > 0) {
## Parent
$forked++;
} elsif(defined $child_pid){
#
# Here some calculations are performed
#
print "Child $$ has finished (number $ispawn) \n";
}
}
for(1..$forked) {
my $child_pid = wait();
}
Все довольно стандартные вещи. Теперь я хотел бы знать, происходит ли сбой какого-либо из дочерних процессов (не удалось правильно завершить). Ясно, что если не будет напечатано последнее утверждение каждого дочернего процесса, я могу предположить, что возникла проблема. Однако я хотел бы другой метод, который полностью завершил бы родительскую программу и закрыл бы все дочерние процессы, которые все еще были открыты, если один из дочерних процессов завершился сбоем. Возможно ли это?