может ли vfork иметь доступ к родительским переменным - PullRequest
3 голосов
/ 08 сентября 2011

Как дочерний процесс изменяет или читает данные в родительском процессе после vfork ()?Переменные, объявленные в родительском процессе, напрямую доступны для дочернего процесса?

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

1 Ответ

2 голосов
/ 08 сентября 2011

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

Форма сообщений может быть сложной частью этого дизайна. Вы можете:

  1. Разработка протокола, который содержит значения и инструкции о том, что с ними делать.
  2. Используйте существующий инструмент маршалинга, такой как Google Protocol Buffers.
  3. Использовать удаленные вызовы процедур с одним из существующих механизмов RPC (т.е. SUN или ONC-RPC).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...