my $timeout = 60; my $logfile = 'logfile.txt'; my @array = ('the_binary -option1', 'the_binary -option2', 'the_binary -option3'); for (@array) { print "Running command $_\n"; eval { local $SIG{ALRM} = sub { my $mod_time = time - (stat($logfile))[9]; if ( $mod_time > 180 ) { die "alarm\n"; } else { alarm 0; alarm $timeout; } }; alarm $timeout; system($_); alarm 0; }; }