프로세스를 특정 시간/CPU 주기로 제한할 수 있나요?

프로세스를 특정 시간/CPU 주기로 제한할 수 있나요?

일부 캐시 파일을 생성하기 위해 UNIX 프로세스를 시작하는 클라이언트 작업에 의해 트리거되는 웹 서버에서 실행되는 스크립트가 있습니다. 이 프로세스는 고객이 제공한 파일에 대해 작동하기 때문에 때때로 비정상적으로 작동하여 너무 오랫동안 실행되어 이를 생성한 PHP 프로세스가 시간 초과되거나 CPU 시간을 너무 많이 사용하여 시스템 관리자가 종료하게 됩니다.

프로세스의 CPU 시간/실행 시간을 제한하는 실행할 수 있는 명령이 있습니까? /usr/bin/time명령을 실행하고 이를 실행하고 제한하려는 명령줄에 전달할 수 있는 유사한 명령을 찾고 있습니다 .

답변1

Giles의 답변 외에도CPU 한도도구는 런타임 시 수정을 포함하여 필요한 작업을 정확하게 수행하도록 설계되었습니다. 또한 특정 CPU/코어 IIRC로만 제한될 수 있습니다.

답변2

프로그램 내에서 호출됩니다 setrlimit(RLIMIT_CPU, ...). 쉘에서 호출됩니다 ulimit -t 42(표준은 아니지만 대부분의 UNIX 변형(bash 및 ksh 포함)에서 대부분의 쉘에서 지원됩니다). 이로 인해 N초의 CPU 시간을 사용한 후 현재 프로세스가 종료됩니다. 이 제한은 하위 프로세스에 상속됩니다. 일반적인 쉘 관용어는 (ulimit -t 42; runaway_process)나중에 동일한 쉘에서 다른 프로세스를 무제한으로 실행할 수 있기를 원하는 경우입니다.

당신은 또한 볼 수 있습니다Unix에서 특정 프로세스가 사용할 수 있는 메모리 양을 제한하는 방법이 있습니까? . 원칙은 동일하지만 다른 리소스가 제한됩니다.

답변3

또한 이 timeout명령을 사용하여 프로세스가 지정된 시간보다 오랫동안 실행되지 않도록 할 수도 있습니다.

$ date
Mon May  6 07:35:07 EDT 2013
$ timeout 5 sleep 100
$ date
Mon May  6 07:35:14 EDT 2013

보다시간 초과 매뉴얼 페이지더 알아보기.

관련 정보