请考虑以下脚本:
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秒钟才出现。如果我从forked child中删除sleep调用,则会立即打印。为什么forked child必须退出才能将数据刷新到父进程?