use IPC::Open3; use strict; my $timeout = 5; my ( $wtr, $rdr, $err ); my $test_program; if ( $^O =~ /win32/i ) { $test_program = q{" $|=1; for( 0 .. 10 ) { print \"$_\n\"; sleep 1; } "}; } else { $test_program = q{ $|=1; for( 0 .. 10 ) { print "$_\n"; sleep 1; } }; } my $pid = open3($wtr, $rdr, $err, 'perl', '-e', $test_program ); my $forked = fork(); die "fork() failed: $!" unless defined $forked; if ( $forked == 0 ) { sleep $timeout; kill(9, $pid); exit; } while ( <$rdr> ) { print $_; sleep 1; } print "finished\n";