스크립트 내에서 호출할 때 ulimit -n이 작동하지 않는 이유는 무엇입니까?

스크립트 내에서 호출할 때 ulimit -n이 작동하지 않는 이유는 무엇입니까?

이것은 매우 이상합니다. 내 설정으로 이것을 시도하고 있습니다 ulimit.60000startup.sh

#!/bin/bash

ulimit -n 60000
echo "Hello! File Descriptor set"

(755 파일 권한)으로 이 작업을 수행할 수 있으며 ./startup.sh에코 라인은 오류 없이 인쇄됩니다. 하지만 이렇게 해도 ulimit -n여전히 표시됩니다 1024. 무슨 일이 일어나고 있는 걸까요?

놀랍게도 ulimit -n 60000터미널에 입력한 다음 실행하면 ulimit -n완벽하게 작동합니다. 스크립트를 통해 파일 설명자 제한을 설정할 수 없는 이유는 무엇입니까?

데비안 8, 64비트. OpenVZ 컨테이너

답변1

이는 단순히 제한이 셸 스크립트, 즉 bash스크립트를 실행하여 생성된 셸(이 경우) 내부에 설정되어 있기 때문입니다(커널은 실제로 스크립트를 셸에 인수로 전달합니다).

따라서 스크립트 실행이 완료되면저것껍질도 사라졌습니다(그리고 제한적입니다). 그런 다음 원래 쉘로 돌아갑니다.

테스트하려면 ulimit -n내부에서 스크립트를 실행하세요.

답변2

ulimit -n프로세스는 자체 및 하위 프로세스에 대해서만 제한을 설정할 수 있습니다. 프로세스별 제한이 아닌 전역 제한을 설정하려고 합니다 . 필요에 따라 전역 제한을 설정하려면 다음을 setrlimit()사용하여 resource.RLIMIT_NOFILEPython 스크립트를 만들 수 있습니다.resource기준 치수.

관련 정보