| Предыдущий | Следующий |
| EBADF | EAGAIN |
ECHILD
Что означает состояние процесса
ECHILD возвращается функциями семейства wait, когда для запроса нет подходящего дочернего процесса, статус которого ещё не был получен. Для waitpid() или waitid() выбранный процесс может не существовать, не быть дочерним для вызывающего либо уже быть обработанным другой ветвью ожидания. Ожидаемая связь родитель–потомок может также измениться, если управление процессами передано супервизору или среде выполнения.
Это не означает «дочерний процесс всё ещё работает». Неблокирующий вызов в таком случае обычно успешно возвращается без изменения состояния — в соответствии с конкретным API и флагами. ECHILD сообщает именно об отсутствии доступного статуса дочернего процесса для указанного отбора.
Как расследовать
- Сохраняйте PID, полученный от функции создания процесса, и явно назначайте компонент, который должен собрать его статус.
- Проверьте, не вызвал ли
waitобработчик сигнала, фреймворк или параллельная ветвь управления. - Проверяйте запрошенный PID и отношение родительства, не воспринимая PID как глобально принадлежащий приложению дескриптор.
- Организуйте завершение так, чтобы статус каждого дочернего процесса собирал ровно один владелец и сохранял его результат.
Ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.