Как получить возвращаемое значение дочернего процесса к его родителю, который был создан с помощью exec? - PullRequest
0 голосов
/ 10 октября 2018

Я видел похожие вопросы здесь и здесь .Ответы предлагают использовать WEXITSTATUS.Но, согласно man-странице WAIT (2), она имеет ограничение.Он говорит: WEXITSTATUS (wstatus) возвращает статус выхода ребенка. Он состоит из наименее значащих 8 битов аргумента состояния , который дочерний элемент указал в вызове exit (3) или _exit (2) или в качестве аргумента для оператора возврата в main ().Этот макрос следует использовать только в том случае, если WIFEXITED вернул true.

Таким образом, если дочерний элемент возвращает значение больше 255, родительский элемент не получает правильное значение.У меня вопрос, как родительский процесс может получить возвращаемое значение, которое больше, чем 255?Спасибо

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Зависит от o / s и его поддержки SA_SIGINFO.Если вы внимательно прочитаете спецификацию POSIX sigaction() и если вы используете SA_SIGINFO для сбора дополнительной информации о доставленных сигналах, и вы поймете сигнал SIGCHLD, то вы можете быть в состоянии получить дополнительную информацию, как описано в Сигнальные действия и <signal.h>.

В частности, в документации <signal.h> отмечается, что когда сигналравно SIGCHLD, тогда:

int si_status

Если si_code равно CLD_EXITED, то si_status содержит выходное значение процесса;в противном случае он равен сигналу, вызвавшему изменение состояния процесса.Выходное значение в si_status должно быть равным полному выходному значению (то есть значение, переданное в _exit(), _Exit() или exit() или возвращенное из main());оно не должно быть ограничено младшими восемью битами значения.

Документация для Linux sigaction() указывает, что это поддерживается в Linux.Однако организовать его значительно сложнее, чем использовать waitpid() или одну из его функций, и я не продемонстрировал, что это действительно работает, как указано в POSIX.

0 голосов
/ 10 октября 2018

Мой вопрос: как родительский процесс может получить возвращаемое значение, которое больше 255?

Не может.Возвращаемое значение процесса должно быть от 0 до 255. Если вы хотите передать любое другое значение между дочерним и родительским элементами, вам нужна некоторая форма межпроцессного взаимодействия, такая как каналы.

...