#! perl -slw use strict; use threads; my $pid = open IN, '-|', qq[ perl -E"\$t=time; say ~~localtime, select'','','',.0001 while time() < \$t + $ARGV[0]" ] or die $!; async { eval { local $SIG{ ALRM } = sub { kill -9, $pid; warn 'timeout'; }; alarm 5; waitpid $pid, 0; alarm 0; }; }->detach; while( ){ print; } __END__ c:\test>junk 4 >junk.log c:\test>dir junk.log 08/06/2010 17:58 13,703,760 junk.log c:\test>junk 6 >junk.log timeout at C:\test\junk.pl line 13. c:\test>dir junk.log 08/06/2010 17:58 22,759,264 junk.log