我有一个内存密集型的Python应用程序(大约几百MB到几GB不等)。 我还有一些非常小的Linux可执行文件,主要是为了运行该应用程序,例如:
child = Popen("make html", cwd = r'../../docs', stdout = PIPE, shell = True)
child.wait()
当我使用
subprocess.Popen
运行这些外部工具(在长主进程运行结束时)时,有时会出现OSError: [Errno 12] Cannot allocate memory
的错误。我不明白为什么它会发生...要求的进程很小!
系统有足够的内存可以支持更多的shell。
我使用Linux(Ubuntu 12.10,64位),因此我猜 subprocess 调用了 Fork。
而 Fork 又复制了我的现有进程,从而使消耗的内存翻倍,并失败了??
“写时复制”机制是怎么回事?
我能否在没有 fork(或者起一个新进程而不复制内存 - 重新开始)的情况下生成一个新进程?
相关: fork()、vfork()、exec()和clone()的区别 fork()和内存分配行为 Python subprocess.Popen 在一段时间后出现 OSError: [Errno 12] Cannot allocate memory错误 使用 subprocess.Popen 出现 Python 内存分配错误