fork

fork

В Unix-системах, fork() — системный вызов, создающий новый процесс (потомок), который является практически полной копией процесса-родителя, выполняющего этот вызов. Между процессом-потомком и процессом-родителем существуют различия:

  • PID процесса-потомка отличен от PID процесса-родителя;
  • значению PPID процесса-потомка присваивается значение PID процесса-родителя;
  • Процесс-потомок получает собственную таблицу файловых дескрипторов, являющуюся копией таблицы процесса-родителя на момент вызова fork(). Это означает, что открытые файлы наследуются, но если процесс-потомок, например, закроет какой-либо файл, то это не повлияет на таблицу дескрипторов процесса-родителя.
  • для процесса-потомка очищаются вcе ожидающие доставки сигналы;
  • временная статистика выполнения процесса-потомка в таблицах ОС обнуляется;
  • блокировки памяти и записи, установленные в процессе-родителе, не наследуются.

После вызова fork() алгоритм обычно разветвляется (в случае успешного выполнения функции fork() она возвращает PID процесса-потомка родительскому процессу и нуль процессу-потомку. Если порождение процесса-потомка закончилось неудачей, функция fork() возвращает значение −1).

После fork() процесс-потомок чаще всего выполняет системный вызов exec(), загружающий в пространство процесса новую программу (именно так, и только так, в Unix-системе выполняется запуск программы в отдельном процессе). Так, первый (нулевой) процесс Unix (ядро системы) создаёт свою копию, чтобы запустить init (процесс с PID = 1), который в свою очередь создаёт дочерние процессы для запуска инициализации системы и терминалов.

Некоторые программы создают дочерние процессы не для запуска другой программы, а для выполнения параллельной задачи. Так, например, поступают простые сетевые серверы — при подсоединении клиента, сервер создаёт свою копию (дочерний процесс), которая обслуживает клиентское соединение и завершается по его закрытию. Родительский же процесс продолжает ожидать новых соединений.

Вызов fork() выполняется довольно долго, так как требует копирования большого количества данных. Для того чтобы это обойти, некоторые сетевые серверы (например, веб-серверы Apache и Lighttpd), создают дочерние процессы заранее, чтобы уменьшить время отклика сервера. Также существуют «облегченные» реализации fork() (Например в ядре Linux[1]), отображающие в новый процесс страницы памяти родительского, вместо того чтобы их копировать (новая страница создаётся только при изменении её содержимого одним из процессов), что существенно снижает время создания нового процесса (т. н. copy-on-write).

Примечания

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Нужно сделать НИР?

Полезное


Смотреть что такое "fork" в других словарях:

  • Fork — (f[^o]rk), n. [AS. forc, fr. L. furca. Cf. {Fourch[ e]}, {Furcate}.] 1. An instrument consisting of a handle with a shank terminating in two or more prongs or tines, which are usually of metal, parallel and slightly curved; used for piercing,… …   The Collaborative International Dictionary of English

  • Fork — (englisch ‚Gabel‘, ‚Verzweigung‘) bezeichnet: einen durch das Betriebssystem bereitgestellten Systemaufruf, durch den ein Folgeprozess gestartet wird, siehe Fork (Unix) in der Softwareentwicklung eine Abspaltung von einem (Haupt )Projekt, siehe… …   Deutsch Wikipedia

  • fork — fork·able; fork; fork·er; fork·ful; fork·i·ness; fork·less; fork·man; pick·fork; un·fork; pitch·fork; fork·ed·ly; fork·ed·ness; …   English syllables

  • fork — [fɔːk ǁ fɔːrk] verb fork out something phrasal verb [intransitive, transitive] informal to spend a lot of money on something, not because you want to but because you have to; =SHELL OUT: • Even more embarrassingly for the struggling bank, it had… …   Financial and business terms

  • fork — [fôrk] n. [ME forke < OE forca & Anglo Fr forque (Fr fourche), both < L furca, two pronged fork] 1. an instrument of greatly varying size with a handle at one end and two or more pointed prongs at the other: forks are variously used as… …   English World dictionary

  • Fork — У этого термина существуют и другие значения, см. Форк (значения). В Unix системах, fork()  системный вызов, создающий новый процесс( потомок), который является почти точной копией процесса( родителя), выполняющего этот вызов. Между… …   Википедия

  • Fork — Fork, v. t. To raise, or pitch with a fork, as hay; to dig or turn over with a fork, as the soil. [1913 Webster] Forking the sheaves on the high laden cart. Prof. Wilson. [1913 Webster] {To fork over} {To fork out}, to hand or pay over, as money; …   The Collaborative International Dictionary of English

  • fork — ► NOUN 1) an implement with two or more prongs used for lifting or holding food. 2) a pronged farm or garden tool used for digging or lifting. 3) each of a pair of supports in which a bicycle or motorcycle wheel revolves. 4) the point where a… …   English terms dictionary

  • fork\ up — • fork over • fork out • fork up v To pay; pay out. He had to fork over fifty dollars to have the car repaired. Compare: hand over …   Словарь американских идиом

  • Fork — Fork, v. i. [imp. & p. p. {Forked}; p. pr. & vb. n. {Forking}.] 1. To shoot into blades, as corn. [1913 Webster] The corn beginneth to fork. Mortimer. [1913 Webster] 2. To divide into two or more branches; as, a road, a tree, or a stream forks.… …   The Collaborative International Dictionary of English

  • fork. — fork. fork. (fork. for forkortelse el. forkortet) …   Dansk ordbog


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»