하위 프로세스에서 연 파일이 상위 프로세스의 파일 열기 제한에 포함됩니까?

하위 프로세스에서 연 파일이 상위 프로세스의 파일 열기 제한에 포함됩니까?

Mac 또는 Linux에서 ulimit -n다음 명령을 사용하면 단일 프로세스에 대한 페이지 열기 제한으로 나타나는 것을 확인할 수 있습니다.이 스택오버플로우 게시물.

따라서 상위 프로세스가 하위 프로세스를 생성하고 해당 하위 프로세스가 파일을 열면 해당 파일이 상위 프로세스의 열린 파일 제한에 포함됩니까?

답변1

RLIMIT_NOFILE은 한 번에 열 수 있는 파일 수가 아니라 가져오거나 할당할 수 있는 최대 파일 설명자 값에 관한 것입니다.

하위 프로세스는 이 제한 사항을 상속하지만 그 외에는 하위 프로세스가 상위 프로세스에 영향을 줄 수 있는 작업을 수행할 수 없습니다. 상위 항목이 0->limit-1 범위에 일부 사용 가능한 fd를 갖고 있는 경우 해당 하위 항목이 무엇을 하든 여전히 새 파일을 열 수 있습니다(해당 제한이 적용됨)(다른 전역 제한에 도달할 수 있음).

어쨌든, 제한이 500이고 제한을 낮추기 전에 일부 파일 설명자가 열려 있으면(상위 프로세스 포함) 여전히 500개가 넘는 파일 설명자를 열 수 있습니다.

$ bash -c 'exec  1023> /dev/null; ulimit -n 500;
   command exec 600> /dev/null; ls -l /proc/self/fd; exit'
bash: 600: Bad file descriptor
total 0
lrwx------ 1 chazelas chazelas 64 Jun 17 08:40 0 -> /dev/pts/1
lrwx------ 1 chazelas chazelas 64 Jun 17 08:40 1 -> /dev/pts/1
l-wx------ 1 chazelas chazelas 64 Jun 17 08:40 1023 -> /dev/null
lrwx------ 1 chazelas chazelas 64 Jun 17 08:40 2 -> /dev/pts/1
l-wx------ 1 chazelas chazelas 64 Jun 17 08:40 3 -> /dev/null
lr-x------ 1 chazelas chazelas 64 Jun 17 08:40 4 -> /proc/8034/fd

프로세스는 ls상위 프로세스에서 상속된 500개의 제한으로 실행됩니다.새로운fd는 499보다 큽니다). 하지만 fd 1023은 아직 열려 있습니다.

관련 정보