$pid = open(PIPE, "$command |") or die $!; eval { local $SIG{ALRM} = sub { die "TIMEDOUT" }; alarm(10); while () { }; close(PIPE); alarm(0); }; if ($@) { die $@ unless $@ =~ /TIMEDOUT/; kill 9, $pid; close(PIPE); ## needed?? $? ||= 9; }