Ваш родительский процесс может использовать pid дочернего процесса, чтобы обнаружить, что он активен или завершился (и может устранить неоднозначность кода ошибки и ошибок "умер из-за сигнала", см. Waitpid).Вы можете использовать определенные коды ошибок или сигналы, чтобы уведомить родителя о конкретных случаях ошибки (например, в разветвленном дочернем элементе перед exec), но для полностью общего дочернего элемента вы не сможете зарезервировать какие-либо коды выхода или сигналы (так какparent не сможет определить, удалось ли выполнить exec, а затем дочерний процесс завершился с этими значениями).
Другой часто используемый подход - создание пары pipe fd (см. системный вызов 'pipe') и передачаодин конец для ребенка (обычно конец записи), а другой - для родителя.Ребенок может использовать это, чтобы отправить конкретные коды ошибок родителю.И родитель может обнаружить преждевременное завершение, если канал закрыт без получения каких-либо данных.Есть некоторые подводные камни: SIGPIPE будет отправлено родителю, если он читает по каналу без активных пишущих, и использование fd (кроме stdin / stdout / stderr) в дочернем процессе может привести к путанице в некоторых плохо написанных дочерних процессах (хотя close-on-exec может помочь исправить это).
В общем, весь код, который я видел, чтобы сделать fork + exec надежным, довольно хакерский.