Вам нужен обработчик сигнала, чтобы позаботиться о сигнале CHLD, когда родительский процесс отправляется при выходе из дочернего процесса.(См. perldoc perlipc
для более подробной информации об обработке сигналов в perl.)
Вы можете сделать что-то вроде ниже в цикле else, чтобы пожинать дочерний процесс.</p>
<pre><code>...
} else {
$SIG{CHLD} = \&reaper
}
# hash to store exit status of child processes
our %child;
sub reaper {
my $x;
while (($x = waitpid(-1,WNOHANG)) >0) {
$child{$x} = $? >> 8;
}
}
или вы можете установить $SIG{CHLD}='IGNORE'
, чтобы не беспокоиться о превращении дочерних процессов в зомби.