Дочерние процессы, потерянные при загрузке в C на linux платформе - PullRequest
0 голосов
/ 27 января 2020

Есть ли ограничения на количество дочерних процессов? допустим, в моей системе запущен родительский процесс и более 500 дочерних процессов.

Родитель выполняет waitpid (-1, status, 0) в режиме блокировки. Я иногда вижу, что waitpid возвращает -1.

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

1 Ответ

1 голос
/ 27 января 2020

Когда системный вызов возвращает ошибку (например, когда waitpid возвращает -1), обратитесь к errno (обычно через perror), если вам необходимо определить, какая ошибка произошла.

Согласно до man 2 waitpid в моей системе возможные ошибки довольно ограничены:

  • ECHILD: процесс, указанный в pid, не существует или не является дочерним по отношению к вызывающему процессу. (Это может произойти для собственного потомка, если для SIGCHLD установлено значение SIG_IGN. См. Также раздел Linux Примечания о потоках.)

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

  • EINVAL: Аргумент параметров недействителен.

Кроме того, EFAULT может быть возвращено, если вы передать неверный адрес для второго аргумента. Похоже, что дело в том, что код, который вы использовали, был использован. [1]

waitpid(-1,status,0)

должно быть

waitpid(-1,&status,0)

Если вы ошиблись или если вы После устранения этой проблемы по-прежнему возникает ошибка:

  • У процесса нет дочерних элементов. Любые дочерние элементы, которые он мог создать, уже были собраны.
  • Вы настроили обработчик сигнала, и сигнал поступил, пока вы ожидали завершения дочернего процесса. Просто позвоните waitpid еще раз.

  1. ВСЕГДА включайте предупреждения вашего компилятора и обрабатывайте их, как если бы они были ошибками! С gcc я использую -Wall -Wextra -pedantic.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...