http://qs321.pair.com?node_id=436051

Here is a way to timeout Open3 processes without using signals or OS-specific modules.

Tested with Perl 5.8.0 under Windows NT, Perl 5.8.5 under Cygwin, and Perl 5.8.4 under Linux.

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\"; sle +ep 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";