NAME
BSD::Resource - BSD process resource limit and priority functions
SYNOPSIS
use BSD::Resource;
($usertime, $systemtime,
$maxrss, $ixrss, $idrss, $isrss, $minflt, $majflt, $nswap,
$inblock, $oublock, $msgsnd, $msgrcv,
$nsignals, $nvcsw, $nivcsw) = getrusage($ru_who);
($nowsoft, $nowhard) = getrlimit($resource);
$nowpriority = getpriority($which, $pr_ywho);
$success = setrlimit($resource, $newsoft, $newhard);
$success = setpriority($which, $who, $priority);
DESCRIPTION
getrusage
For a detailed description about the values returned by getrusage() please consult your usual C programming documentation about getrusage() and also the header file sys/resource.h
. The $ru_who argument is either RUSAGE_SELF (the current process) or RUSAGE_CHILDREN (all the child processes of the current process). On some (very few) systems (those supporting both getrusage() and the POSIX threads) there is also RUSAGE_THREAD. The BSD::Resource supports the _THREAD flag if it is present but understands nothing about the POSIX threads themselves.
Note 1: officially HP-UX 9 does not support getrusage() at all but for the time being, it does seem to.
Note 2: Solaris claims in sys/rusage.h
that the ixrss
and the isrss
fields are always zero.
getrlimit
Processes have soft and hard resource limits. At soft limit they receive a signal (XCPU or XFSZ, normally) they can trap and handle and at hard limit they will be ruthlessly killed by the KILL signal. The $resource argument can be one of
RLIMIT_CPU RLIMIT_FSIZE
RLIMIT_DATA RLIMIT_STACK RLIMIT_CORE RLIMIT_RSS
RLIMIT_NOFILE RLIMIT_OPEN_MAX
RLIMIT_AS RLIMIT_VMEM
The last two pairs (NO_FILE, OPEN_MAX) and (AS, VMEM) mean the same, the former being the BSD names and the latter SVR4 names. Two meta-resource-symbols might exist
RLIM_NLIMITS
RLIM_INFINITY
NLIMITS being the number of possible (but not necessarily fully supported) resource limits, INFINITY being useful in setrlimit().
NOTE: the level of 'support' for a resource varies. Not all the systems
a) even recognise all those limits
b) really track the consumption of a resource
c) care (send those signals) if a resource limit get exceeded
Again, please consult your usual C programming documentation.
One notable exception: officially HP-UX 9 does not support getrlimit() at all but for the time being, it does seem to.
getpriority
The priorities returned by getpriority() are [PRIO_MIN,PRIO_MAX]. The $which argument can be any of PRIO_PROCESS (a process) PRIO_USER (a user), or PRIO_PGRP (a process group). The $pr_who argument tells which process/user/process group, 0 signifying the current one.
setrlimit
A normal user process can only lower its resource limits. Soft or hard limit RLIM_INFINITY means as much as possible, the real limits are normally buried inside the kernel.
setpriority
The priorities handled by setpriority() are [PRIO_MIN,PRIO_MAX]. A normal user process can only lower its priority (make it more positive).
EXAMPLES
# the user and system times so far by the process itself
($usertime, $systemtime) = getrusage(RUSAGE_SELF);
# get the current priority level of this process
$currprio = getpriority(PRIO_PROCESS, 0);
VERSION
v1.0, $Id: Resource.pm,v 1.6 1995/12/18 08:32:00 jhi Exp $
AUTHOR
Jarkko Hietaniemi, Jarkko.Hietaniemi@hut.fi