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