tokuhirom
8/13/2010 - 8:50 AM

deadlock.pl

#!perl -w

use strict;
use IPC::Open3;
use Symbol qw(gensym);

my($wtr, $rdr, $err) = (gensym, gensym, gensym);

my $pid = open3($wtr, $rdr, 0, "perl", "-e",
    'print $_ qq{x\n} x (1024 * 1024) for \*STDOUT, \*STDERR');
close $wtr;
() = <$rdr>;
warn "waitpid $pid ...\n";
waitpid $pid, 0;
warn $?, "\n";
__END__
#!perl -w

use strict;
use IPC::Open3;
use Symbol qw(gensym);

my($r, $w, $e) = (gensym, gensym, gensym);

my $pid = open3($r, $w, $e, "perl", "-e",
    'print $_ qq{x\n} x (1024 * 1024) for \*STDOUT, \*STDERR');
#close $w; # => SIGPIPE
#close $e; # => SIGPIPE
warn "waitpid $pid ...\n";
waitpid $pid, 0;
warn $?, "\n";
__END__