Приложения системного вызова fork - PullRequest
6 голосов
/ 28 августа 2009

fork используется для создания копии процесса, из которого он вызван. За этим обычно следуют вызовы семейства функций exec. Есть ли какие-либо применения вилки, кроме этой? Я могу думать об одном. Выполнение IPC с функциями трубы.

Ответы [ 5 ]

7 голосов
/ 28 августа 2009

Да, конечно. Весьма распространено запустить процесс, выполнить некоторую инициализацию данных, а затем создать нескольких рабочих. Все они имеют одинаковые данные в своем адресном пространстве, и это копия при записи.

Другая распространенная вещь - заставить основной процесс прослушивать TCP-сокет и fork () для каждого входящего соединения. Таким образом, новые соединения могут обрабатываться немедленно, в то время как существующие соединения обрабатываются параллельно.

Я думаю, что вы забыли, что после fork () оба процесса имеют доступ ко всем данным, которые существовали в процессе до fork ().

6 голосов
/ 28 августа 2009

Другое использование fork - отсоединение от родительского процесса (возврат к init, процессу 1). Если какой-то процесс, скажем, bash с pid 1111, запускает myserver, который получает pid 2222, он будет иметь 1111 в качестве родителя. Предположим, 2222 вилки и дочерний элемент получает pid 3333. Если теперь процесс 2222 завершается, 3333 потеряет своего родителя, и вместо этого он получит init в качестве нового родителя.

Эта стратегия иногда используется демонами при запуске, чтобы не иметь родительских отношений с процессом, который его запустил. Смотри также этот ответ .

1 голос
/ 28 августа 2009

«Использование» вилки - создание Fork Bomb

1 голос
/ 28 августа 2009

Если у вас есть какой-то сервер, прослушивающий входящие соединения, вы можете разветвить дочерний процесс для обработки входящего запроса (который не обязательно будет включать exec или каналы).

0 голосов
/ 28 августа 2009

Я написал небольшую оболочку, и она была полна вилок (да, это exec ..), особенно для элементов трубопровода. страница википедии на трубе

...