なぜシステムのファイル記述子の総数が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増えません。

おすすめ記事