我在Jupyter笔记本中有以下代码:
import resource
resource.setrlimit(resource.RLIMIT_NPROC, (1024, 1024))
while True:
try:
pid = os.fork()
if pid != 0:
count += 1
else:
break
except Exception as e:
print(e)
print("COUNT: ", count)
根据我的理解,这应该保持分叉直到它达到1024,然后捕获异常并且创建的进程数应该是1024.
当我跑步时,我第一次得到896,但每次之后,即使是第一个叉也不会跑。
我猜测896是因为Jupyter的一些开销,但为什么在我专门重新连接后执行的数量会持续存在以便重新调用popen?
nproc限制的作用是什么?它是所有子进程和分叉吗?如果是这样,有什么方法可以得到这些列表吗?
我尝试过阅读/proc/self/task
的孩子,但这些孩子的数量是不变的。
另外,在Jupyter popen命令中设置RLIMIT_NPROC
是否等同于运行ulimit -u
?这相当于在RLIMIT_NPROC
中设置preexec_fn
吗?