我有一个内存密集型的Python应用程序(介于几百MB到几GB之间).
我有几个非常小的Linux可执行文件,主应用程序需要运行,例如
child = Popen("make html", cwd = r'../../docs', stdout = PIPE, shell = True)
child.wait()
Run Code Online (Sandbox Code Playgroud)
当我运行这些外部实用程序(一次,在长主进程运行结束时)使用subprocess.Popen我有时得到OSError: [Errno 12] Cannot allocate memory.
我不明白为什么......请求的过程很小!
系统有足够的内存用于更多的shell.
我正在使用Linux(Ubuntu 12.10,64位),所以我猜Subprocess调用了Fork.
而Fork分叉我现有的进程,从而使消耗的内存量增加一倍,并且失败了?
"写字复制"怎么了?
我可以在没有fork的情况下生成一个新进程(或者至少没有复制内存 - 重新启动)?
有关:
fork(),vfork(),exec()和clone()之间的区别