wait () в C. Какие аргументы я должен передать ему - PullRequest
1 голос
/ 05 февраля 2011

Какие аргументы я должен передать в wait (), чтобы он ожидал завершения всех дочерних процессов, прежде чем продолжить

1 Ответ

5 голосов
/ 05 февраля 2011

wait ждет только одного ребенка.Вы должны вызывать wait(NULL) в цикле, пока он не вернет -1 с errno == ECHILD:

while (wait(NULL) != -1 || errno != ECHILD) { }

со страницы руководства wait (2):

ECHILD (for wait())

В вызывающем процессе нет ожидающих детей.

EINTR

WNOHANG не был установлен и обнаружен разблокированный сигнал или SIGCHLD;см. сигнал (7).

Таким образом, вы должны проверить ECHILD, чтобы вас не обманул пойманный сигнал.

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