Python Glossary English

все Python 3Linux · macOSosфункция

os.fork

os — создание процессов

Порождает дочерний процесс копированием текущего: возвращает 0 в потомке и PID потомка в родителе. Доступно на Unix.

Синтаксис

os.fork(...)

Копирует процесс целиком, но в потомке остаётся лишь поток, вызвавший fork: блокировки, захваченные другими потоками, остаются захваченными навсегда. Поэтому с 3.12 fork в многопоточной программе даёт DeprecationWarning, а на macOS fork без exec вообще ненадёжен. Для параллельных задач безопаснее multiprocessing или subprocess; в потомке выходят через os._exit.

Примеры

import os
data = [1, 2, 3]
pid = os.fork()   # → ? только Unix (на Windows — AttributeError): в потомке 0, в родителе PID потомка, например 12345
data.append(pid)   # → ? память скопирована: у потомка список станет [1, 2, 3, 0], у родителя [1, 2, 3, 12345]
if pid == 0: os._exit(0)   # → ? потомок завершается немедленно, минуя atexit-обработчики и сброс буферов
print(os.waitpid(pid, 0))   # → ? только в родителе: (12345, 0) — второй элемент это сырой статус, а не код выхода (см. os.waitstatus_to_exitcode)

См. также

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности