... my ($mem1,$mem2) = &Display_Mem_Usage($child[$no],$NAME,0); if ( $mem1 > 0 ) { my $diff1 = $mem1 - $pmem1; my $diff2 = $mem2 - $pmem2; if ( $diff1 > $max_virtual ) { ... } # kill the child elsif ( $diff2 > $max_real ) { ... } # kill the child } ... sub Display_Mem_Usage { # VSZ is size in KBytes of the virtual memory ( VSZ * 1024 ) # RSS is size in pages of real memory ( 1024 * RSS ) my $cpid = shift; my $name = shift; my $from = shift; ## Not used here, but in some scripts my $var = ""; my $fh; if ( ! ( kill 0 => $cpid ) ) ## Check that pid is active { return ( -1, -1 ); } my $arg = qq| -o "vsz rssize" -p $cpid|; ## make sure you specify the full path to 'ps' command open ( $fh, "-|", "/bin/ps $arg" ) or die "Prefork: Not open \'$arg\': $!"; while (<$fh>) { $var .= $_; } close $fh; my $rno = my @ref = split(/\n/,$var); if ( $rno < 2 ) { return ( -1, -1 ); } my $info = join(" ", split " ", $ref[1]); my ($vmem,$rmem) = ( split(/\ /,$info) ); return ( $vmem , $rmem ); }