#!/usr/bin/perl use strict; use Sys::CpuLoad; use Proc::ProcessTable; use vars qw( $sleep_time @memory $memory_size $count $threshold $program @pids ); $program = '/usr/bin/perl'; $threshold = 1; #load $sleep_time = 1; #seconds $memory_size = 10; $count = 0; while (1) { if (load_average() > $threshold) { @pids = search_procs(); if (@pids) { killall(@pids); } } $count++; sleep $sleep_time; } exit; sub load_average { my ($last, $average); $last = (Sys::CpuLoad::load())[0]; $memory[$count % $memory_size] = $last; $average += $_ foreach @memory; $average = $average / $memory_size; return $average; } sub search_procs { my ($ppt, $proc, @pids); $ppt = new Proc::ProcessTable; foreach $proc (@{$ppt->table}) { next unless ($proc->{exec} eq $program); push @pids, $proc->{pid}; } return @pids; } sub killall { print join(' ', @_), "\n"; }