Почему мой родительский процесс не видит вывод дочернего процесса, пока он не завершится?
Рассмотрим следующий скрипт:
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);
}
В этом случае сообщение «child:» не появляется в течение 5 секунд после запуска процесса. Если я уберу вызов сна из разветвленного ребенка, то он сразу напечатает. Почему раздвоенный ребенок должен выйти за трубу, чтобы смыть к родителю?