http://www.perlmonks.org?node_id=254756
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!  :-)