Por que meu processo pai não vê a saída da criança até que ela saia?
Considere o seguinte script:
use IO::File;
$| = 1;
my ($handle, $pid) = myPipe();
if ($pid == 0) {
print "$";
sleep 5;
exit;
}
print "child: ".<$handle>."\n";
sub myPipe {
my $handle = new IO::File();
my $pid = open($handle, "-|");
return ($handle, $pid);
}
Nesse caso, a mensagem "filho:" não aparece por 5 segundos após o início do processo. Se eu remover a chamada de suspensão da criança bifurcada, ela será impressa imediatamente. Por que a criança bifurcada precisa sair para o tubo descarregar para o pai?