Перед завершением работы сервер уничтожает все оставшиеся дочерние процессы в целях выполнения корректного завершения. Аналогичным образом предусмотрена возможность прервать цикл accept () дочернего процесса, чтобы этот процесс завершался немедленно, сразу же после получения сигнала об окончании работы от родительского процесса.
В любой момент времени существует единственный активный дескриптор файла CHILD_READ в родительском процессе и несколько дескрипторов CHILD_WRIТЕ в дочерних процессах. Может возникнуть вопрос: почему не происходит нарушения структуры сообщений, поступающих от дочерних процессов, которые могли бы накладываться друг на друга. В настоящем проекте такого не происходит в связи с определенными характеристиками данной реализации канала. Если сообщения не превышают предельного размера, операции записи в канал выполняются автоматически, а это гарантирует, что сообщение, записанное в канал одним процессом, не будет прервано сообщением, записанным другим процессом. Благодаря этому, сообщения, записанные в канал, появляются с другого конца канала в неизменном виде и не смешиваются с данными, которые появились в результате выполнения операций записи другими процессами. Предельный размер автоматически передаваемых сообщений зависит от значения константы PIPE_BUF операционной системы, которая определена в файле заголовка limits.h. Это значение зависит от операционной системы, но обычно не бывает ниже 512 байт.