Связь между родительским процессом и несколькими детьми - PullRequest
3 голосов
/ 02 апреля 2012

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

Я пытался использовать каналы для связи с помощью функции read(), чтобы отправить обратно сообщение о завершении.Однако это каким-то образом блокирует весь параллелизм и ожидает завершения 1-го дочернего процесса и отправки обратно сообщения завершения перед обработкой запросов следующего процесса.

Есть ли способ решить эту проблему?Или я должен использовать такие методы, как разделяемая память, сокеты и т. Д.?

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

1 Ответ

2 голосов
/ 02 апреля 2012

На POSIX-совместимых платформах, если вы просто хотите знать, когда завершается дочерний процесс, и больше ничего, тогда вы можете использовать сигнал SIGCHLD .
SIGCHLD - этоСигнал, отправляемый процессу, когда дочерний процесс завершается. Вы можете обработать его, написав собственный обработчик сигнала.Его возвращаемое значение - это идентификатор процесса дочернего процесса, который завершается.

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

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