#! perl -slw use strict; use IPC::Open3; $|++; sub timeout { my ($timeout, $output_ref, @cmd ) = @_; print "@cmd"; my ($wtr, $rdr); my $pid = open3( $wtr, $rdr, $rdr, @cmd ); print $pid; my $start = time(); while( <$rdr> ) { push @$output_ref, $_; if (($start+$timeout) < time() ) { kill( 9, $pid) or warn $!; return 0; # Timeout. @$output_ref may contain some output. } } return -1; # Successful completion. } my @output; if ( timeout(10, \@output, 'ping', '-t', 'bbc.co.uk') ) { print @output; } else { print "timed out...\n@output"; }