Как дождаться завершения ВСЕХ дочерних процессов и получить статус каждого выхода - PullRequest
1 голос
/ 20 ноября 2011

Итак, я провел небольшое исследование, но, похоже, не слишком много оно подходит для моей ситуации, или я просто не понимаю этого.

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

Я хочу, чтобы родительский процесс .. мог быть основным родительским процессомпоймать состояние выхода ЛЮБЫХ детей (дочерний элемент первого форка и ЛЮБОГО его дочерних элементов, когда он разветвляется)

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

В настоящее время .. Я могу поймать, если первый дочерний элемент завершается с ошибкой, и получитьправо exitstatus .. но ни один из его детей не будет работать.Не уверен, что мне нужно использовать странную версию waitpid или что-то подобное.

Как мне это сделать?

1 Ответ

3 голосов
/ 20 ноября 2011

Вызов ожидание системный вызов (или waitpid(-1, &status, 0)).Или дождитесь некоторого идентификатора группы процессов (поскольку все ваши косвенные дочерние элементы совместно используют одну и ту же группу процессов, если они не меняют ее).Возможно, создайте свою собственную группу процессов с помощью setpgid

И вы получите сигнал SIGCHLD при выходе ребенка.

...