왜 시스템의 총 파일 설명자 수가 fork() 이후에 증가하지 않습니까?

왜 시스템의 총 파일 설명자 수가 fork() 이후에 증가하지 않습니까?

처음에는 내 프로그램에서 많은 파일 설명자를 만들었고 시스템 파일 설명자의 수가 증가하는 것을 보았습니다.

# bash(1) before:
cat /proc/sys/fs/file-nr
1024    0   97861
# bash (2): create a lot of fds
>>> a = []
>>> while True:
...   a.append(open('asdf', 'a'))
... 
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
IOError: [Errno 24] Too many open files: 'asdf'
>>> 

예상대로 파일 설명자 수가 증가했습니다.

# back to bash (1) output
cat /proc/sys/fs/file-nr
2048    0   97861

이제 Python에서 fork()하면 커널이 모든 fd를 자식에도 복사할 것으로 예상됩니다. 하지만 이로 인해 file-nr?

# bash (2): more commands at python- fork a child
>>> import os
>>> import time
>>> if os.fork() == 0:
...   time.sleep(1000)
... else:
...   time.sleep(1000)
... 

답변1

file-nr공개 개수 표시문서, 커널의 관점에서(이는파일 설명 열기, 그것들은 커널 데이터 구조이지,파일 설명자, 이는 프로세스별)입니다. Forking은 새 파일을 열지 않으므로 파일 수가 file-nr증가하지 않습니다.

관련 정보