Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

call setrlimit to limit process resource usage

by jdporter (Paladin)
on May 01, 2003 at 18:20 UTC ( [id://254756]=CUFP: print w/replies, xml ) Need Help??

On 2000/05/26, In <tfhtisospckcr7spdptj58acjuqnd7jl05@4ax.com>, Bernie Cosell wrote:
> Can you set your process's (and most importantly, its children's)
> resource limits (via the setrlimit(2) system call) from Perl?

Surely. Here's an example, a wrapper around setrlimit(RLIMIT_CPU).

# Note that I've hardcoded things like EPERM,EFAULT,EINVAL from sys/ +errno.h, # SYS_setrlimit from sys/syscall.h, and RLIMIT_CPU from sys/resource +.h # it might be preferable to h2ph the respective .h files... sub set_max_cpu_time { my $n_seconds = shift; my $s = pack( 'LL', $n_seconds, $n_seconds+1 ); $! = 0; if ( syscall( 128, 0, $s ) == -1 ) # SYS_setrlimit, RLIMIT_CPU { if ( $! == 1 ) # EPERM { die "$!; Sorry, you need to be superuser to do that.\n"; } elsif ( $! == 14 ) # EFAULT { die "$!; Error: argument to setrlimit pointed to an illegal ad +dress.\n"; } elsif ( $! == 22 ) # EINVAL { die "$!; Error: the new rlim_cur exceeds the new rlim_max, or the limit specified cannot be lowered because current usa +ge is already higher than the limit.\n"; } } } # test it: set_max_cpu_time( 8 ); my $n = 0; while ( 1 ) { $n++ } # Hmm, mysteriously dumps core after about 8 seconds! :-)

Replies are listed 'Best First'.
Re: call setrlimit to limit process resource usage
by jaldhar (Vicar) on May 01, 2003 at 19:33 UTC

    Nice but did you know there already is a module BSD::Resource for doing this? And it's a lot more portable than your code.

    --
    જલધર

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: CUFP [id://254756]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others sharing their wisdom with the Monastery: (6)
As of 2024-04-23 08:36 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found