У меня есть приложение Python с интенсивной памятью (от сотни МБ до нескольких ГБ). 
У меня есть несколько ОЧЕНЬ МАЛЕНЬКИХ Linux-исполняемых файлов, которые нужно запустить главному приложению, например.
child = Popen("make html", cwd = r'../../docs', stdout = PIPE, shell = True)
child.wait()
Когда я запускаю эти внешние утилиты (один раз, в конце длинного основного процесса), используя subprocess.Popen, я иногда получаю OSError: [Errno 12] Cannot allocate memory. 
Я не понимаю, почему... Запрошенный процесс крошечный! 
В системе достаточно памяти для многих других оболочек.
Я использую Linux (Ubuntu 12.10, 64 бит), поэтому я думаю, что подпроцесс вызывает Fork. 
И Fork разворачивает мой существующий процесс, тем самым удваивая количество потребляемой памяти и терпя неудачу? 
Что случилось с копией на запись?
Можно ли создать новый процесс без вилки (или, по крайней мере, без копирования памяти - начиная с нуля)?
по теме:
Разница между fork(), vfork(), exec() и clone()
fork() и поведение распределения памяти
Ошибка выделения памяти Python с помощью подпроцесса. Открытие
