Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

call setrlimit to limit process resource usage

by jdporter (Canon)
on May 01, 2003 at 18:20 UTC ( #254756=snippet: print w/ replies, xml ) Need Help??

Description:

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!  :-)


Comment on call setrlimit to limit process resource usage
Download Code
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.

    --
    જલધર

Back to Snippets Section

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (12)
As of 2014-10-24 13:41 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    For retirement, I am banking on:










    Results (132 votes), past polls