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 );
}