Зависит от 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.