eval { local $SIG{ALRM} = sub { die "alarm\n" }; alarm 20; $CHILD = fork(); if( $CHILD == 0 ) { exec( "my external command" ); } waitpid( $CHILD, 0 ); alarm 0; }; if( $@ ) { die unless $@ eq "alarm\n"; kill 9, $CHILD }