Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
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 musing on the Monastery: (7)
As of 2014-09-15 11:14 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite cookbook is:










    Results (147 votes), past polls