Вы должны быть более ясны в отношении структуры процесса, чем в данный момент. Процесс сервера остается живым независимо от процессов клиента? Слушает ли он общеизвестный номер порта? Когда первый (родительский) процесс на стороне клиента подключается к серверу?
Вы говорите, что клиент разветвляет дочерний элемент, а затем сообщает серверу о дочернем PID. Ребенок также общается с сервером? Открывает ли оно независимое соединение с сервером, или оно вытесняет соединение родительского процесса, или дочерний и родительский узел пытаются разделить одно соединение с сервером? Как вы координируете доступ по одному соединению?
Одна общая установка для такой системы:
- Серверный процесс запускается как демон, который прослушивает известный или настроенный порт.
- Первоначальный клиентский (родительский) процесс устанавливает соединение с сервером.
- Вторичный клиентский (дочерний) процесс отключает унаследованное соединение и устанавливает свое собственное соединение с сервером.
Существует два режима работы для соединений:
- Клиентский процесс открывает соединение, пишет сообщение, может ожидать ответа и каждый раз закрывает соединение. Это механизм, используемый веб-браузерами, потому что Интернет обеспечивает соединения без сохранения состояния.
- Клиентский процесс открывает соединение и сохраняет его открытым (и сервер не закрывает соединение, пока не возникнет чрезвычайная ситуация или клиент не согласится (или не запросит) закрыть его. Этот механизм обычно используется клиентами базы данных, подключающимися к сервер базы данных.
Оба режима работают - они по-разному влияют на издержки (при каждом подключении требуется много времени) и использование ресурсов (постоянные соединения потребляют больше ресурсов на сервере; клиенты не подвергаются серьезному воздействию).