어린이에게 적용되는 Perl 스크립트 내부에서 Ulimit을 어떻게 설정합니까?

StackOverflow https://stackoverflow.com/questions/2226329

  •  19-09-2019
  •  | 
  •  

문제

회사를위한 개발 상자를 설정하기 위해 다양한 설치 단계를 수행하는 PERL 스크립트가 있습니다. 다양한 쉘 스크립트를 실행하며 그 중 일부는 필요한 것보다 낮아서 충돌합니다. ulimitS (특히 스택 크기 -s 나의 경우에는).

따라서 a를 설정하고 싶습니다 ulimit 모든 스크립트에 적용됩니다 (children)는 내 주요 Perl One에서 시작했지만 그 방법을 달성하는 방법을 잘 모르겠습니다. 스크립트 내에서 Ulimit을 호출하려는 시도는 특정 하위 쉘에만 설정하여 즉시 종료됩니다.

나는 내가 전화 할 수 있다는 것을 알고있다 ulimit Perl 스크립트 또는 사용을 실행하기 전에 /etc/security/limits.conf 그러나 나는 사용자가 이것을 알고 싶지 않습니다. 그들은 스크립트를 실행하는 방법 만 알아야합니다.

나도 달릴 수 있습니다 ulimit 이와 같은 명령을 실행할 때마다 ulimit -s BLA; ./cmd 그러나 나는 매번 이것을 복제하고 싶지 않으며 더 깨끗하고 깨끗한 솔루션이있는 것 같습니다.

또 다른 미친 "해결 방법"은 bla.sh라는 래퍼 스크립트를 만드는 것입니다. Bla.sh는 ulimit을 설정하고 bla.pl을 호출 할 것입니다. 그러나 다시, 그것은 내 마음에 해킹이며 이제 2 개의 스크립트를 가질 것입니다 (Bla.pl을 만들 수도 있습니다. "ulimit -s bla; ./bla.pl - -foo"와 함께 전화를 걸고 -foo를 보는지 여부에 따라 다르게 행동하지만 이전보다 훨씬 해킹됩니다).

마지막으로 BSD :: Resource를 설치할 수는 있지만 외부 종속성을 사용하지 않으려 고합니다.

그래서 무엇입니까 그만큼 Perl 스크립트 내에서 Ulimit을 설정하고 모든 어린이에게 적용하는 방법?

고맙습니다.

도움이 되었습니까?

해결책 4

나는 결국 선불로 끝났다 ulimit -s BLA 필요한 명령에. BSD :: Resource는 기본 Perl 패키지가 아니고 기존 개발자 기계의 약 절반에 누락 되었기 때문에 BSD :: Resource를 사용하고 싶지 않았습니다. 사용자 상호 작용은 특정 요구 사항이 아닙니다.

다른 팁

당신은 이미 당신의 질문에 대답했습니다 : 사용 BSD :: 자원.

Perl 코어에는 다음과 인터페이스하는 것이 없습니다. setrlimit. 표준 방법을 사용할 수 없거나 사용하지 않으면 해킹을 사용해야합니다. 이미 설명한 방법은 작동합니다. (Prepend Subroutine을 만들 수 있습니다. ulimit -s BLA; 모든 명령에, 그리고 대신 해당 하위를 사용하십시오. system.)

당신은 항상 작은 쉘 스크립트로 perl을 감을 수 있습니다.

#!/bin/sh -- # --*-Perl-*--
ulimit -n 2048
exec /usr/bin/perl -x -S $0 ${1+"$@"}
#!/usr/bin/perl
#line 6

use strict;

# etc, etc....

추악하고 분명히 스크립트 시작 시간이 약간 길어질 것입니다.

다음은 BSD :: Resource를 사용하지 않고 CPU 제한을 설정하는 방법의 예입니다 (그러나 PERL 시스템 헤더가 있다고 가정). 다른 리소스에 적응하려면 명백한 변경을 수행하십시오.

require 'syscall.ph';
require 'sys/resource.ph';

# set the soft cpu limit to 1 (second), and the hard limit to 10.
$rstruct = pack "L!L!",1,10; # L! means native long unsigned int.
syscall(&SYS_setrlimit,&RLIMIT_CPU,$rstruct);

이것은 RLIM_T가 실제로 서명되지 않았다는 지식을 가정합니다. Perl 헤더 에서이 정보를 추출 할 수있는 방법이 있는지 모르겠습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top