最初は私のプログラムで多くのファイル記述子を作成し、システムファイル記述子の数が増えるのを見ました。
# 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)
...