$SIG{ALRM} = sub { #cleanup lockfile #cleanup anything else exit; } alarm(1200); # do stuff # If you have system calls here (i.e. sysread) you # may need to do some wrapping with eval etc. (as per # the alarm perldoc alarm(0);