sub bsd_size_check { return (&BSD::Resource::getrusage())[2,3]; } # ... $HOW_BIG_IS_IT = \&bsd_size_check; # ... my($size, $share) = &$HOW_BIG_IS_IT(); if (($MAX_PROCESS_SIZE && $size > $MAX_PROCESS_SIZE) || ($MIN_SHARE_SIZE && $share < $MIN_SHARE_SIZE) || ($MAX_UNSHARED_SIZE && ($size - $share) > $MAX_UNSHARED_SIZE)) { #### ($MAX_UNSHARED_SIZE && ($size - $share) > $MAX_UNSHARED_SIZE)) { #### ($MAX_UNSHARED_SIZE && ($size - $share) > $MAX_UNSHARED_SIZE)) { #### # rss is in KB but ixrss is in BYTES. # This is true on at least FreeBSD, OpenBSD, & NetBSD - Phil Gollucci sub _bsd_size_check { my @results = BSD::Resource::getrusage(); my $max_rss = $results[2]; my $max_ixrss = int ( $results[3] / 1024 ); return ( $max_rss, $max_ixrss ); } #### sub _bsd_size_check { # kB = kilobytes, kBt = kilobytes * ticks (of CPU): my( $userSecs, $sysSecs, $res_kB, $shared_kBt, $data_kBt, $stack_kBt )= BSD::Resource::getrusage(); my @next; do { # keep refetching until one clock tick passes @next= BSD::Resource::getrusage(); } while( $data_kBt == $next[4] ); # Compute the differences between the two results: for( $userSecs, $sysSecs, $res_kB, $shared_kBt, $data_kBt, $stack_kBt ) { $_= shift(@next) - $_; } my $ticks= ( $userSecs + $sysSecs ) * 128; my $shared_kB= $shared_kBt / $ticks; my $unshared_kB= ( $data_kBt + $stack_kBt ) / $ticks; return( $unshared_kB + $shared_kB, $shared_kB ); }