Warum sieht mein Elternprozess die Ausgabe des Kindes nicht, bis es beendet wird?

Betrachten Sie das folgende Skript:

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);
}

In diesem Fall wird die Meldung "child:" erst 5 Sekunden nach dem Start des Vorgangs angezeigt. Wenn ich den Schlafanruf vom gegabelten Kind entferne, wird er sofort gedruckt. Warum muss das gegabelte Kind aussteigen, damit das Rohr zum Elternteil fließt?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage