our @handles; our $message = ('xxxxxxxx'); sub child { my $buffer; while(sysread(STDIN, $buffer, 8)) { print("$$: $buffer\n"); } } for($i=0; $i < 4; $i++) { if(!open($handles[$i], '|-')) { # child process child(); exit 0; } } for($i=0; $i < 4; $i++) { syswrite($handles[$i], $message); syswrite($handles[$i], $message); syswrite($handles[$i], $message); } for($i=0; $i < 4; $i++) { close($handles[$i]); } Produces the following output then freezes: 18241: xxxxxxxx 18241: xxxxxxxx 18241: xxxxxxxx 18242: xxxxxxxx 18242: xxxxxxxx 18242: xxxxxxxx 18243: xxxxxxxx 18243: xxxxxxxx 18243: xxxxxxxx 18244: xxxxxxxx 18244: xxxxxxxx 18244: xxxxxxxx